よろしくお願いいたします。例えばリッチテキストボックスに”変数”と
入力し、そのRTFを見ると”\'95\'cf\'90\'94”となっていますが、
この 95 cf 90 94 という数値を得る方法をご教授ください。
忘れていました。環境は XP で VB.NETです。
>この 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)
こんなかな、コード自信無し。
文字列を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")のようにする事も可能です。
# 応用すれば、別の文字コードでの変換にも使えるかと。
我龍院忠太さま、魔界の仮面弁士さま、回答をありがとうございます。
目的は、リッチテキストボックスで特定の文字列の色を変えることです。
つまり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)
目的そのものは達成されたので解決をチエックしますが、もし、さらなる
アドバイスがあればよろしくお願いいたします。
| ツイート |
|