@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

RichTextBoxでの文字化け

1
投稿者投稿内容
hidenet
会議室デビュー日: 2007/01/05
投稿数: 2
投稿日時: 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 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-05 21:18
クロスサイトポスト。情報共有のためにリンクします。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nennen
会議室デビュー日: 2007/09/10
投稿数: 1
投稿日時: 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);
}

hidenet
会議室デビュー日: 2007/01/05
投稿数: 2
投稿日時: 2007-09-11 12:54
文字化けしないことを確認できました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)