char → UTF8 への変換 – プログラミング – Home

通知
すべてクリア

[解決済] char → UTF8 への変換


potu
 potu
(@potu)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

potuです。お世話になってます。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?rint+200208/02080088.txt」
と同じようなことなのですが、質問は文字の変換についてです。

今回は、char → UTF8 への変換を行いたいと思っています。

手順としては、
①呼び元で変換する文字が「Work」に格納され、渡されてきます。
②それを変換します。、
③変換した文字を「Buf」に格納し、呼びもとに返します。

②で「UTF8」に変換することが出来ずに困っています。

WideCharToMultiByteを使用して書いたプログラムを下記に載せます。
「ここが違う」などのご指摘をしていただけると幸いです。

------ここから

void xxx( char* Work, char* Buf )
// Work 変換する文字(入力済み。例えば「potu」など
// Buf 変換した結果の文字を格納。
{

wchar_t wszBuf[1600];

// Char → Unicode
WideCharToMultiByte(
CP_UTF8,
0,
(const unsigned short *)pcWork,
-1,
(char *)wszBuf,
2048 * 2,
NULL,
NULL);

// Unicode → UTF8
MultiByteToWideChar(
CP_UTF8, // ANSI code page
0, // 既定の変換方法
(const char *)wszBuf, // 変換元文字列
-1, // 変換元文字列サイズ(-1指定で自動計算)
(unsigned short *)pcBuf, // 変換先バッファ
1025); // 変換先バッファサイズ

return;

}

------ここまで

環境は、Win2000, VC6.0, コンソールアプリで作成しています。

ご教授をお願いいたします。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

丸囲み数字はJIS X 0208外の文字です。使わないようにしましょう。
あと,
・コードを写すときには元のコードと間違いが無いことを確認すること
#pcWork, pcBufは定義されていません。
・エラーがあるならエラーコード(GetLastErrorの戻り値含む),出力結果などを提示すること
を行って下さい。

とりあえず,手順が完全に間違っています。

> // Char → Unicode
> WideCharToMultiByte(

従来コード(UTF-8含む)からワイド文字に変換するには,MultiByteToWideCharを使います。

std::vector<wchar_t> wide_buffer(MultiByteToWideChar(CP_ACP, 0, Work, -1, 0, 0));
if (wide_buffer.size() == 0) return; // Error!
if (MultiByteToWideChar(CP_ACP, 0, Work, -1, &wide_buffer[0],
wide_buffer.size()) != wide_buffer.size()) return; // Error!

> // Unicode → UTF8
> MultiByteToWideChar(

ワイド文字から従来コードに変換するにはWideCharToMultiByteを使います。


返信引用
potu
 potu
(@potu)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

YuOさんレスありがとうございます。

おかげ様で、作りたいプログラムができました!

YuOさんに教えていただいた通り、

>従来コード(UTF-8含む)からワイド文字に変換するには,MultiByteToWideCharを使います。

>ワイド文字から従来コードに変換するにはWideCharToMultiByteを使います。

として、YuOさんのプログラムを参考に作りました。

あと、

>丸囲み数字はJIS X 0208外の文字です。使わないようにしましょう。
>あと,
>・コードを写すときには元のコードと間違いが無いことを確認すること
>#pcWork, pcBufは定義されていません。
>・エラーがあるならエラーコード(GetLastErrorの戻り値含む),出力結果などを提示すること
>を行って下さい。

これは私のミスです。すみません。
今度から気をつけます。

下記に、プログラムを載せます。
ありがとうございました。

----------------------------------------------------------

void xxx( char* pcWork, char* pcBuf )
// Work 変換する文字(入力済み。例えば「potu」など
// Buf 変換した結果の文字を格納。
{

wchar_t wszBuf[1600];

// Char → Unicode
MultiByteToWideChar(
CP_ACP, // ANSI code page
0, // 既定の変換方法
(const char *)pcWork, // 変換元文字列
-1, // 変換元文字列サイズ(-1指定で自動計算)
(unsigned short *)wszBuf, // 変換先バッファ
1025); // 変換先バッファサイズ

// Unicode → UTF8
WideCharToMultiByte(
CP_UTF8,
0,
(const unsigned short *)wszBuf,
-1,
(char *)pcBuf,
2048 * 2,
NULL,
NULL);

return;
}

----------------------------------------------------------


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました