現在取り組んでいるシステム開発で、漢字が含まれている文字列を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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- その他(Microsoft Office) Microsoft IME 一発で変換できない言葉がある 3 2022/07/19 19:29
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- デスクトップパソコン IMEの不具合 4 2022/11/13 17:05
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(プログラミング・Web制作) iMacのターミナルにユニコード文字を出す方法 2 2022/06/22 21:48
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
std::stringからLPCWSTR型への変換
-
VS 2008(VB.NET)
-
CString ←→ BSTRの変換について
-
「彡」って文字はなんという文...
-
sedで日本語の置換方法について
-
S-JIS → JIS コード変換するには
-
PL/SQLでSJISの文字コードを取...
-
XMLデータの中の改行コードにつ...
-
ふりがなをアルファベット化す...
-
VBScript ASC関数:文字エンコ...
-
VB6.0で小数10進数を16進数に変...
-
DOUBLE型の16進HEX文字列変換に...
-
ビット反転(Not)が機能しない
-
数値のパック10進数の変換に...
-
友人とのラインで 「~MBと書く...
-
ExcelVBA実行後に時々落ちる
-
VB6.0のコードエディタでの改行...
-
Symfowareでのデータ型変換につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
友人とのラインで 「~MBと書く...
-
std::stringからLPCWSTR型への変換
-
英数字を含む文字列(0-9,A-Z)...
-
ExcelVBA実行後に時々落ちる
-
Excelマクロにて30分単位の計算...
-
ふりがなをアルファベット化す...
-
sedで日本語の置換方法について
-
VS 2008(VB.NET)
-
S-JIS → JIS コード変換するには
-
COBOLによる全角・半角混...
-
Symfowareでのデータ型変換につ...
-
CString ←→ BSTRの変換について
-
JIS → S-JIS コード変換するには
-
2バイト文字をJEFからSJISに変...
-
EBCDICをASCIIに変換したい
-
フォームのコントロールのバッ...
-
EBCDICへの変換
おすすめ情報