はじめまして。くろねこと申します。
この掲示板で、文字列とUnicodeについての記事を読み疑問に思ったことがありましたので、質問させていただきます。
VBの書籍でも、VBでは文字列をUnicodeで持っていると書かれていますが、
この掲示板の記事に、TextBoxコントロールはUnicodeに対応していません。といったことが書いてありました。
ということは、TextBoxに文字列を表示する時には「Unicode→シフトJIS」に変換された後に表示されているのでしょうか?
仮に上記のような動作だとした場合、
Unicodeに対応している「Microsoft forms 2.0」のTextBoxに日本語とハングル文字を表示した時も「Unicode→シフトJIS」のような変換が行われるのでしょうか?(シフトJISではハングル文字の表示は出来ないと思いますが)
VBはどこまでUnicodeで文字列を持っているのかが、いまいち良く分からない状態です。
以上。よろしくお願いいたします。
> ということは、TextBoxに文字列を表示する時には「Unicode→シフトJIS」に変換された後に表示されているのでしょうか?
日本語環境においては、そういう事になりますね。
> VBはどこまでUnicodeで文字列を持っているのかが、いまいち良く分からない状態です。
String型の中身は基本的にUnicode(UTS-2)です。
MidやReplaceといった文字列処理関数も、引数が「Unicode形式の文字列」であるという前提で処理されます。
ただし、入出力の際には、基本的にANSIで行われます。
(例えば、Print #ステートメントやMsgBox関数は「Unicode形式の文字列」を受け取りますが、出力結果はANSIです)
それと、コントロールの対応についてですが…。
そもそも、Win9X系のOSはUnicode版のTextBox (EditBox Window)を作れないようです。
そうした事情もあって、全ての「標準コントロール」は、ANSIバージョンが使われています。
一方「ActiveXコントロール」は、「常にANSIで動作する」コントロールもありますし、
DBGridのように「Win9X系ではANSIで動作、NT系ではUnicodeで処理」というコントロールや、
WebBrowserのように「常にUnicodeで処理」というコントロールなどもあります。
ちなみに、MSForms の TextBox をフォームに貼り、右クリックの[編集]して、直接 Unicode 文字(例えば、"立方メートル" の記号など)を入力すると、コントロール上には表示されるものの、(プロパティウィンドウの)Valueプロパティの項は、"??"と化けて表示されます。
ただしそれは、プロパティウィンドウに表示できないというだけであり、データとしてはUnicodeになっているので、バイト配列に格納したり、AscW関数で調べたりすれば、正しい文字コードが格納されている事を確認できます。
> String型の中身は基本的にUnicode(UTS-2)です。
"UCS-2"の書き間違いです。m(_ _)m
くろねこです。
魔界の仮面弁士様、お返事ありがとうございます。
コントロールによりいろいろな動作があるのですね。
string型で持っている文字列と表示コントロールに、このような関係があるとは知らずに今まで来てしまいましたが、これでモヤモヤが晴れました。