VBで管理されているUnicodeとは?

解決


くろねこ  2004-02-04 17:30:54  No: 111673  IP: [192.*.*.*]

はじめまして。くろねこと申します。

この掲示板で、文字列とUnicodeについての記事を読み疑問に思ったことがありましたので、質問させていただきます。

VBの書籍でも、VBでは文字列をUnicodeで持っていると書かれていますが、
この掲示板の記事に、TextBoxコントロールはUnicodeに対応していません。といったことが書いてありました。
ということは、TextBoxに文字列を表示する時には「Unicode→シフトJIS」に変換された後に表示されているのでしょうか?

仮に上記のような動作だとした場合、
Unicodeに対応している「Microsoft forms 2.0」のTextBoxに日本語とハングル文字を表示した時も「Unicode→シフトJIS」のような変換が行われるのでしょうか?(シフトJISではハングル文字の表示は出来ないと思いますが)

VBはどこまでUnicodeで文字列を持っているのかが、いまいち良く分からない状態です。

以上。よろしくお願いいたします。

編集 削除
魔界の仮面弁士  2004-02-04 22:34:41  No: 111674  IP: [192.*.*.*]

> ということは、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関数で調べたりすれば、正しい文字コードが格納されている事を確認できます。

編集 削除
魔界の仮面弁士  2004-02-05 05:13:42  No: 111675  IP: [192.*.*.*]

> String型の中身は基本的にUnicode(UTS-2)です。
"UCS-2"の書き間違いです。m(_ _)m

編集 削除
くろねこ  2004-02-05 12:03:07  No: 111676  IP: [192.*.*.*]

くろねこです。

魔界の仮面弁士様、お返事ありがとうございます。
コントロールによりいろいろな動作があるのですね。

string型で持っている文字列と表示コントロールに、このような関係があるとは知らずに今まで来てしまいましたが、これでモヤモヤが晴れました。

編集 削除