DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列から一行ずつ読み込むについて質問です。

環境/言語:[xp VB.NET famework1.0]
分類:[.NET]

DOBON.NET > プログラミング道 > .NET Tips > 文字列・暗号化
にある
文字列から一行ずつ読み込む

'TextBox1に入力されている文字列から一行ずつ読み込む
'文字列(TextBox1に入力された文字列)からMemoryStreamインスタンスを作成
Dim ms As New System.IO.MemoryStream _
(System.Text.Encoding.GetEncoding(932).GetBytes(TextBox1.Text))
'StreamReaderインスタンスの作成
Dim rs As New System.IO.StreamReader(ms)
'ストリームの末端まで繰り返す
Do While (rs.Peek() > -1)
'一行読み込んで表示する
Console.WriteLine(rs.ReadLine())
Loop
rs.Close()

は日本語の文字列でもちゃんと動くのでしょうか?
それとも半角英数のみですか?

日本語のままで取り出したいのですが実行すると
記号のようになったり(バイト配列?)なにも出なかったりします。

アドバイスおねがいします。
MemoryStreamを作成したときのコンストラクタのエンコード形式を適切なものに変えてみては?
ガッツさんありがとうございます。

'文字列(TextBox1に入力された文字列)からMemoryStreamインスタンスを作成
Dim ms As New System.IO.MemoryStream _
(System.Text.Encoding.GetEncoding(932).GetBytes(TextBox1.Text))

の部分のことですよね?
いろいろ試してみたんですけどうまくいきません・・・

System.Text.Encoding.GetEncoding(932)
まではこれでいいですよね?

GetBytes(TextBox1.Text)
の部分をGetcharとかGetStringとかいろいろかえてみたんですけど

TextBox1.Text
に波線がでて[型'string'の値をByteの1次元配列に変換できません。]
と表示されます。

なにか全然関係ないことをしてしまっているのでしょうか?
もう少しアドバイスいただけたうれしいです。
横からすいません。
僕も試していたら偶然に日本語が表示されました。

下記です。参考になればと思います。

Dim ms As New System.IO.MemoryStream _
(System.Text.UnicodeEncoding.UTF8.GetBytes(TextBox1.Text))

この上記コードの意味はよくわかりません(すいません)が、日本語も半角英数もいけるような気がします。一応実行して確認しました。確認してもらえたらうれしいです。
こうさんありがとうございます。

日本語でちゃんと表示されました。
自分もコードの事は全然わからないことばかりで。。
 
がんばって勉強して行きたいと思います。

また困ったときは力を貸してください。
本当にありがとうございました。
解決済み!
■No12123に返信(こうさんの記事)
> 僕も試していたら偶然に日本語が表示されました。

うまくいかなかった理由は、文字符号化方式の不一致です。

Encoding.GetEncoding(932).GetBytes(TextBox1.Text) という式で、TextBox1
に入力された文字列を、Shift_JIS (Windows-31J) 方式で表現した場合のバイ
ト列が得られます。ですから、サンプルコードにある MemoryStream オブジェ
クトは、ストリームの内容として、Shift_JIS 表現の文字列を持っていること
になります。

文字符号化方式を明示せずに作成した StreamReader オブジェクトは、基にな
るストリームの内容を、UTF-8 表現の文字列として扱いますから、うまくいか
ないのは自明ですよね。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板