掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
英語環境VBでユニコードファイルを読み込むには (ID:114282)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ユニコードの種類に関しては知らなかったので、これから調べます。 よく使われる符号化方式は、UCS-2(UTF16相当)か、UTF-8あたりでしょうね。 前者はすべての文字が2バイトで表現されるのですが、後者(UTF-8)は、 文字によってバイト数が異なります(1〜6バイト)。 たとえば、ASCII文字(Basic Lathin)等は1バイトですが、ギリシャ文字(Greek)等は2バイト、 中国/日本/韓国語(CJK Unified Ideographs)等は3バイトで表現されます。 # ちなみに、VB.NETではUTF-8が多用されています。 > そして、この取得した文字列をexeに使用される全ての文字列に使用し、NLS化を行 > おうとしています。 質問の表題にある「Uniodeの読み込み」に関しては、そう難しい話では 無いと思っています。難しいのはむしろ、読み込んだUnicode文字列を、 どうやって VBの画面上に表示させるかという点でしょうね。 > もう一度まとめますと、 > 英語環境 strConv使用 文字化け > 英語環境 strConv不使用 正しく表示 > 日本語環境 strConv使用 特定文字が文字化け > 日本語環境 strConv不使用 文字化け > といった感じです。 「文字は正しいが、グリフが異なってしまう」という状態 (例えば、http://www.ocv.ne.jp/~oratorio/junk/charcter.html)ではなく、 データそのものが化けてしまっている状態ですよね。 まず、StrConvというのは、vbFromUnicode/vbUnicodeを指定した時の事だと思いますが、 それらの定数は、Unicodeと「システム既定のコードページ」の間での変換を指示する物です。 たとえば——Shift_JISで、すべての中国語漢字を扱う事はできませんよね。 日本に無い漢字は、Unicodeでは表現できても、Shift_JISでは表せませんから。 それと同じで、英語環境で vbFromUnicode を使っても、日本語文字を ANSI変換する事はできないわけです。それゆえ、StrConvしない方が良いでしょう。 (同様の理由で、LCMapString API をそれらの文字に使った事も避けるべきかと) もしも、文字化けせずに表示させたいなら(つまり、化けそうな文字を切り捨てたり、 使えない文字を代替文字に置換したりする事無しに、正しく表示させたいならば)、 コードページの変換を行ってから表示するのではなく、Unicodeのまま表示させてやる 必要があるかと思います。(この場合、標準コントロールは一切使えませんが…) > 「変換できない文字は諦める」 > 「Unicodeのまま表示させる事を考える」 > のどちらかになるということですね。 私自身は、多言語対応アプリを作った経験は無いのですが、もし実際に 作る事になったとすれば、この2つのいずれかを採用すると思います。 前者は、「日本語環境では日本語しか表示させない」のような考え方です。 たとえば、『(c)』のコピーライト文字などは、Shift_JISでは表現できませんので (欧文フォントや記号フォントを使って、見た目上で表現するという事はできますけど)、 あらかじめ、「元のデータに、表現できない文字を含めないようにしておく」か、 もしくは、「表現できないデータが出てきたら読み捨てる」事で対処するという方法です。 一方後者は、可能な限り、「すべての環境で、すべての文字を表示させる」という考え方です。 Win9X系だと、OSのUnicodeサポートの関係から、対応できない部分もあるかも 知れませんが、NT4であれば理論的には可能だと思います。 # VB.NETのコントロールとは異なり、VB5の標準コントロールでは、 # Unicode 文字を扱えないという点がネックになりますが…。 なお、VB5/VB6にてUnicode文字を表示するサンプルは、過去に何度か 紹介していますので、掲示板の過去ログについても調べてみてください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.