文字コード変換するには? – プログラミング – Home

文字コード変換するには?
 
通知
すべてクリア

文字コード変換するには?


てつ
 てつ
(@てつ)
ゲスト
結合: 24年前
投稿: 2
Topic starter  

NT4.0+VC6.0環境で
文字コードをS-JISをUTF-8にする方法を知りませんか?

WIN32APIの
MultiByteToWideCharをつかってみましたがうまくいきません。
例などはないですか?
その他の方法でもいいですが,ロジックでカバーしたいです。


引用解決済
トピックタグ
自己レス
 自己レス
(@自己レス)
ゲスト
結合: 24年前
投稿: 1
 

反応がないので自己レスします。

(1) Win32ではS-JIS->UTF2->UTF8でカバーできると思います。
ただし,APIのバグはあるようです。
ucs2len = MultiByteToWideChar(CP_ACP,
MB_PRECOMPOSED,
s,
strlen(s),
ucs2,
sizeof(ucs2)/sizeof(*ucs2));
utf8len = WideCharToMultiByte(CP_UTF8,
0,
ucs2,
ucs2len,
utf8,
sizeof(utf8),
NULL,
NULL);

(2) 変換テーブルをもつ方法
unix等に対応するのであれば規格にそって変換テーブルをもつ。
http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT

#詳しくは samba-2.0.7 JP2.1 の source/lib の、
#kanji.c,util-unistr.c にあります。

VC++ならこんな感じですね。
CString SJIStoUTF8(LPCSTR lpszSJis){
USES_CONVERSION;
LPWSTR pText = A2W(lpszSJis);
CString result;

while(*pText != L'\0'){
if(0<=*pText && *pText<=0x7f){
result += (char)*pText;
}else if(0x80<=*pText && *pText<=0x7ff){
result += (unsigned char)((*pText >> 6) & 0x1f)|0xc0;
result += (unsigned char)(*pText & 0x3f)|0x80;
}else if(0x800<=*pText && *pText<=0xffff){
result += (unsigned char)((*pText >> 12) & 0x0f)|0xe0;
result += (unsigned char)((*pText >> 6) & 0x3f)|0x80;
result += (unsigned char)(*pText & 0x3f)|0x80;
}
pText++;
}
return result;
}

以上。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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