ASCII文字131(ƒ-フック付きラテン小文字f)をメッセージボックスに出力しようとしていますが、奇妙な理由で、空の文字列として表示されます。私は次のVB.NETコードを持っています:
Dim str As String = Convert.ToChar(131)
MessageBox.Show(str, "test", MessageBoxButtons.OK, MessageBoxIcon.Information)
Debug.Print(str)
上記では、メッセージボックスには何も表示されませんが、debug.printステートメントは「イミディエイトウィンドウ」に文字を正しく表示します。他に約70のASCII文字があり、これらはすべてこの方法で正常に機能しますが、空白として表示されるのは一部の文字のみです(131およびENダッシュ150)。
たとえば、次のように機能します。
str = Convert.ToChar(164)
MessageBox.Show(str, "test", MessageBoxButtons.OK, MessageBoxIcon.Information)
Debug.Print(str)
また、UTF8に変換しようとしましたが、最初のコードスニペットと同じ動作が得られます。
Dim utf8Encoding As New System.Text.UTF8Encoding(True)
Dim encodedString() As Byte
str = Convert.ToChar(131)
encodedString = utf8Encoding.GetBytes(str)
Dim str2 As String = utf8Encoding.GetString(encodedString)
MessageBox.Show(str2, "test", MessageBoxButtons.OK, MessageBoxIcon.Information)
Debug.Print(str2)
これはエンコーディングの問題ですか?洞察をありがとう。
編集:明確にするために、私は実際に文字をメッセージボックスに出力しようとはしていません。そのコードは単なるテストでした。文字を文字列としてサードパーティのxmlエディターコントロールで使用する関数に渡そうとしていますが、空白で表示されます。Visual Studioでデバッグしているときでも、その値が「」に等しいことがわかります。
編集2:以下の受け入れられた回答からのいくつかの調査のおかげで、私は間違ったユニコード文字を使用していることを発見しました。このf文字の場合、使用するコードはToChar(402)でした。これは完璧に機能しました。皆さん、ありがとうございました。