テキストボックスに入力した文字のSJISコードとunicodeコードを表示する方法(その逆も)が知りたいです。
例)「愛」という漢字をテキストボックス1に入力すると,
テキストボックス2にSJISコードを表す"88A4"が表示される
テキストボックス3にunicodeを表す「U+611B」が表示される
逆は,unicodeの "611B" を入力すると文字”愛”が表示される
SJISの"88A4"を”愛”に変換する方法は過去ログで分かりました。
環境を書きましょう。
VB6/VBA と VB.NET と VBScript(HTA等)では、コードも変わります。
VB6/VBA なら、こんな感じ。Chr関数/ChrW関数を使います。
逆変換は、Asc関数 / AscW 関数です。
Private Sub Text1_Change()
Dim S As String
S = Left(Text1.Text, 1)
If S = "" Then
Label1.Caption = ""
Label2.Caption = ""
Else
Label1.Caption = "U+" & Right("0000" & Hex(AscW(S)), 4)
If Asc(S) < 0 Then
Label2.Caption = Right("0000" & Hex(Asc(S)), 4)
Else
Label2.Caption = Right("00" & Hex(Asc(S)), 2)
End If
End If
End Sub
魔界の仮面弁士様ありがとうございました。
Chr関数/ChrW関数を使って逆変換も成功しました。
あと一点だけご存じでしたら教えてください。
漢字「愛」のユニコードは611Bですが,word文書を16進ダンプで表示すると1B61と逆に格納されています。どうしてなのでしょう?
(前回質問したWindows File Timeの時も,これに気づかず苦戦しました。)
エンディアン を調べてみてください。
> 漢字「愛」のユニコードは611Bですが,word文書を16進ダンプで表示すると
> 1B61と逆に格納されています。どうしてなのでしょう?
逆というわけでは無かったりします。(むしろ Windows にとっては標準的)
そもそも、Unicode という文字集合(charset)の符号化方式(encoding)は、
一種類だけではありません。U+611B だからといって、そのバイナリ表現まで
61,1B であるという事ではありません。
たとえば、U+611B の 『愛』(CJK UNIFIED IDEOGRAPH-611B)を表すにしても
UTF-7 エンコード
2B 59 52 73 2D
UTF-8 エンコード
E6 84 9B
UTF-8 エンコード(BOM付)
EF BB BF E6 84 9B
UTF-16LE エンコード
1B 61
UTF-16BE エンコード
61 1B
UTF-16 エンコード(BOM付き)リトルエンディアン
FF FE 1B 61
UTF-16 エンコード(BOM付き)ビッグエンディアン
FE FF 61 1B
などと、幾つかの Unicode 表現があったりします。
http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm
T★M様ならびに魔界の仮面弁士様
大変参考になります。
ありがとうございました。
ツイート | ![]() |