dポイントプレゼントキャンペーン実施中!

現在取り組んでいるシステム開発で、漢字が含まれている文字列をUnicodeに変換する処理を行っています。例えば、

StrConv("出力", vbUnicode)

上記の変換結果は、"(8)娚"となります。この文字を、

StrConv("(8)娚", vbFromUnicode)

このように再び漢字に戻した結果、"宇力"という文字化けが発生してしまいます。
いろいろと調べていたら、"出"と"宇"のUnicodeへの変換結果がどちらも"(8)"で同じである事に気付きました。これは一体、どういうことなのでしょうか?

漢字を文字化けさせないでUnicodeに変換するにはどうすればよいですか?
また、Unicodeに変換する関数;MultiByteToWideChar()のVBでの記述方法や宣言の仕方など詳しく教えて下さい!!
よろしくお願い致します。。。

A 回答 (2件)

"出力"という文字をファイルから得ているのではなく、定数または変数に値を代入しておられませんか?


いずれにせよ、VB6のコード上で "出力" と書いたらそれはUniCodeとして
扱われていると思います。

ファイルから読み取るなら、String変数で受け取った時点でUniCodeになります。
回避策はByteで変数を宣言してください。


WIndowsNT4またはWindows2000の「メモ帳」がUniCodeの変換を行なってくれます。

いずれも[ファイル]-[名前を付けて保存する]のダイアログにUniCodeの指定があります。

NT4は単に[UniCodeで保存する]チェックボックス、
Win2Kはデフォルトが[ANSI]ですがUniCodeの形式がいくつか指定できます。

これらを換えて保存して見てください。
保存した結果はDOS窓からDEBUGコマンドでDUMPして確認ください。

1.>DEBUG [ファイル名]と入力後、-のプロンプトになります。
2.dと入力すると(Display or Dumpの略)文字コードの詳細が見えます。
3.終了はq(Quitの略)です。dosプロンプトに戻ります。

これで目的のファイルを得る手段(SJIS16ファイル→UniCode)がわかったら、
DDEかSendKeyかSendMassegeでVBからメモ帳をコントロールするコードを書くのが簡単かと思います。
    • good
    • 0
この回答へのお礼

アドバイス、どうもありがとうございました。

指摘されていたように、"出力"という文字をString変数で受け取っていたため、二重にUnicode変換を行っていたみたいです。

また、Dos窓から文字コードの詳細を見る方法まで教えていただき、大変役に立たせる事が出来ました。

お陰で、システム開発の方も順調に行きそうです。

お礼日時:2002/05/24 21:04

> VBでの記述方法


とありますがご使用の環境は何でしょうか?

VB5以降でしたらコードを記述した時点ですでに「Unicode」に
なってるでしょうから変換の順序が逆ではないでしょうか?

以下の結果は "出力"が得られます。
F8のステップ実行で見ると、途中のstr1には"??"が入ってます。

Sub test()

Dim str1 As String
Dim str2 As String

str1 = StrConv("出力", vbFromUnicode)

str2 = StrConv(str1, vbUnicode)

MsgBox str2

End Sub

この回答への補足

開発環境は、VB6.0です。

今やろうとしている事を具体的に言うと、
制御マシンに読みこませるためのコマンドを、Unicodeに変換してファイルに書き出す処理を行っています。Unicodeは、通常のWindowsUnicode(UTF16L)で記述しないといけません。

例えば、"出力"という漢字をStrConv関数でUnicodeに変換すると"(8)娚"という結果が得られ、この結果を制御マシンに読み込ませるためそのままファイルに書き出します。
このファイルを、制御マシンの方でUnicodeからシステムの既定のコードページに変換して出力させるのですが、変換結果が前回質問に書いた通り"宇力"となって出力されます。恐らく、"出"と"宇"のUnicodeへの変換結果が同じであったので、既定のコードページでコードがダブっていると思われます。従って、Unicodeから既定のコードページに変換する際、"出"の方ではなく"宇"の方が表示されてしまうのです。

文字化けさせずに、漢字をUnicodeへ変換するよい方法はないのでしょうか?
何かありましたら教えて下さい。

補足日時:2002/05/24 09:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!