リッチテキストのRTFに入れる漢字のコードについて

解決


キッチ  2006-01-29 16:28:46  No: 129928

よろしくお願いいたします。例えばリッチテキストボックスに”変数”と
入力し、そのRTFを見ると”\'95\'cf\'90\'94”となっていますが、
この  95  cf  90  94  という数値を得る方法をご教授ください。


キッチ  2006-01-29 18:37:52  No: 129929

忘れていました。環境は  XP  で  VB.NETです。


我龍院忠太  2006-01-30 08:24:21  No: 129930

>この  95  cf  90  94  という数値を得る方法をご教授ください。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnrtfspec/html/rtfspec_5.asp
Shift-JISコードの上位2バイトと下位2バイトですね。
Dim i As Integer
Dim strS As String
For i = 0 To RichTextBox1.Text.Length - 1
    strS = strS + " " + Hex(CShort(Asc(RichTextBox1.Text.Substring(i, 1))))
Next
Debug.WriteLine(strS)
こんなかな、コード自信無し。


魔界の仮面弁士  2006-01-30 09:41:29  No: 129931

文字列を16進数のコードで表すのが目的なのでしょうか。
それとも、RTF の生成が目的なのでしょうか。


> そのRTFを見ると”\'95\'cf\'90\'94”となっていますが
その16進数が表す意味は、RTFヘッダ内の「\ansicpg数値」の設定によって変化します。
今回の場合、“変数”が“\'95\'cf\'90\'94”になったという事ですので、これは
「\ansicpg932」が指定されていたのでしょう。
http://msdn.microsoft.com/library/en-us/dnrtfspec/html/rtfspec_6.asp



このような変換には、System.Text.Encodingクラスを使って変換できます。

Dim Source As String = "変数"
Dim bin() As Byte = System.Text.Encoding.GetEncoding(932).GetBytes(Source)
Dim Result As String = System.BitConverter.ToString(bin)


なお、『.GetEncoding(932)』の部分が、RTFコードの『\ansicpg932』に該当します。
あるいはこの部分を、.GetEncoding("Shift_JIS")のようにする事も可能です。

# 応用すれば、別の文字コードでの変換にも使えるかと。


キッチ  2006-02-01 06:13:11  No: 129932

我龍院忠太さま、魔界の仮面弁士さま、回答をありがとうございます。
目的は、リッチテキストボックスで特定の文字列の色を変えることです。
つまりRTFの生成となります。
いただいたアドバイスを元に以下のようなコードでそれには成功しました。
(カラーテーブルは作成されているものとします)
       Dim Source As String = "変数"
        Dim bin() As Byte = System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(Source)
        Dim Result As String = System.BitConverter.ToString(bin)
        Dim beforeRTF As String
        Dim afterRTF As String

        beforeRTF = "'\" + Replace(Result, "-", "'\")
        afterRTF = "\cf1 " + beforeRTF + "\cf0 "
        RichTextBox1.Rtf = Replace(RichTextBox1.Rtf, beforeRTF, afterRTF)
目的そのものは達成されたので解決をチエックしますが、もし、さらなる
アドバイスがあればよろしくお願いいたします。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加