
現在取り組んでいるシステム開発で、漢字が含まれている文字列をUnicodeに変換する処理を行っています。例えば、
StrConv("出力", vbUnicode)
上記の変換結果は、"(8)娚"となります。この文字を、
StrConv("(8)娚", vbFromUnicode)
このように再び漢字に戻した結果、"宇力"という文字化けが発生してしまいます。
いろいろと調べていたら、"出"と"宇"のUnicodeへの変換結果がどちらも"(8)"で同じである事に気付きました。これは一体、どういうことなのでしょうか?
漢字を文字化けさせないでUnicodeに変換するにはどうすればよいですか?
また、Unicodeに変換する関数;MultiByteToWideChar()のVBでの記述方法や宣言の仕方など詳しく教えて下さい!!
よろしくお願い致します。。。
No.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からメモ帳をコントロールするコードを書くのが簡単かと思います。
アドバイス、どうもありがとうございました。
指摘されていたように、"出力"という文字をString変数で受け取っていたため、二重にUnicode変換を行っていたみたいです。
また、Dos窓から文字コードの詳細を見る方法まで教えていただき、大変役に立たせる事が出来ました。
お陰で、システム開発の方も順調に行きそうです。
No.1
- 回答日時:
> 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へ変換するよい方法はないのでしょうか?
何かありましたら教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
Symfowareでのデータ型変換につ...
-
COBOLによる全角・半角混...
-
sedで日本語の置換方法について
-
CSVをVB(input)で読み込んだ場...
-
std::stringからLPCWSTR型への変換
-
16進数で表示
-
dsPICを用いたPWM出力
-
COBOLのデータ型
-
2バイト文字をJEFからSJISに変...
-
数千の単語の並び替えについて。
-
文字コード(EUC->SJIS)につい...
-
文字の変換 (アルファベット)
-
byte配列の内容をstringにコピ...
-
C言語でUTF-8コードで読み込ん...
-
VS 2008(VB.NET)
-
Excelで入力禁止文字を設定したい
-
エクセルでアルファベットか数...
-
DOHCとOHC
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
std::stringからLPCWSTR型への変換
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
VS 2008(VB.NET)
-
COBOLによる全角・半角混...
-
ふりがなをアルファベット化す...
-
Symfowareでのデータ型変換につ...
-
RubyでUTF8のコード値を文字に...
-
フォームのコントロールのバッ...
-
%fと%gについて
-
ExcelVBA実行後に時々落ちる
-
JIS → S-JIS コード変換するには
-
英数字を含む文字列(0-9,A-Z)...
-
sedで日本語の置換方法について
-
byte配列の内容をstringにコピ...
-
数字5桁文字コード?
-
accessでJISコードを求める関数
-
コード変換について
-
「髙(はしごたか)」を文字コー...
おすすめ情報