- - PR -
RichTextBoxでの文字化け
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-01-05 16:56
RichTextBoxで、Unicodeの私用領域であり外字枠であるはずの
[F000]から256文字が、以下のプログラムを実行すると「文字化け」して、 正しく表示されません。 表示された文字コードを調べると、 「F000」・「F001」・「F002」であるべき所が、 「0000」・「0001」・「0002」になってしまっています。 原因がお分かりでしたら、ご教授願います。 (言語は、Visual Basicです。) -------------------------------- 01| Dim intN As Integer = 0 02| Dim strS As String = "" 03| 04| intN = Convert.ToInt32("F000", 16) 05| 06| For i As Integer = 0 To 255 07| strS = strS & ChrW( intN + i ) 08| Next 09| 10| RichTextBox1.Text = strS 11| TextBox1.Text = strS -------------------------------- [ メッセージ編集済み 編集者: hidenet 編集日時 2007-01-05 18:59 ] |
|
投稿日時: 2007-01-05 21:18
クロスサイトポスト。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2007-09-10 18:18
RichTextBoxコントロールのバグだと思うのですが、
私は以下の方法でこのバグを回避できたので報告しておきます。 このバグは、RichTextBoxコントロールのTextプロパティやSelectedTextプロパティに F000からF0FFの範囲のUnicodeを代入すると発生するものです。 その他の範囲のunicodeに文字化けは見つけていません。 代入文字列をRtf形式にして、RtfプロパティやSelectedRtfプロパティに代入すると 正しく表示されることを確認しました。 C#のソースですが、 RichTextBox rtb として、 private void mnu_paste_Click(object sender, System.EventArgs e) { // クリップボードオブジェクトを獲得 IDataObject data = Clipboard.GetDataObject(); // なければ無効、あってもテキスト以外は無効 if ((data == null) || (!data.GetDataPresent(DataFormats.Text))) return; if (rtb != null) { // richtextboxに貼り付け rtb.SelectedRtf = to_rtf((string)data.GetData(DataFormats.Text)); } } // rtf変換処理 private string to_rtf(string instr) { string rtn = "{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\fnil\\fcharset128 " + UserFontName + ";}}" + "{\\colortbl ;\\red0\\green0\\blue0;}" + "\\viewkind4\\uc1\\pard\\cf1\\lang1041\\b\\f0\\fs24"; if ((instr != null) && (instr.Length != 0)) { // 1文字毎の処理 for (int i = 0; i < instr.Length; i++) { char[] code = instr.Substring(i, 1).ToCharArray(); int ucode = (int)(code[0]); if (ucode == 10) { rtn += "\\par"; } else { rtn += String.Format("\\u{0} ?", ucode); } } } rtn += "\\par}"; return(rtn); } |
|
投稿日時: 2007-09-11 12:54
文字化けしないことを確認できました。
ありがとうございました。 |
1