- 自分のメモ書きとして使えるかな?
- pukiwikiになれているので、このwikiの使い方がいまいちわからない。
SJIS <-> UTF-8 サンプル & 解説
//chrに代入されているShift-JISの文字列をUTF-8に変換します。
#include "llmod.as"
a= 64
b= 64
sdim chr, a
sdim tmp, b
chr= "SJISからUTF8"
//*
//notesel chr
//noteload "0.txt"
//dialog chr
prm= 0, 0, 0, -1, 0, b
getptr prm.2, chr
getptr prm.4, tmp
dllproc "MultiByteToWideChar", prm, 6, D_KERNEL
prm= 65001 , 0, 0, -1, 0, a, 0, 0
getptr prm.2, tmp
getptr prm.4, chr
dllproc "WideCharToMultiByte", prm, 8, D_KERNEL
notesel chr
notesave "0.txt"
//*
//notesave "1.txt"
1.MultiByteToWideCharを呼ぶ->2.WideCharToMultiByteを呼ぶ。
これは SJIS -> UTF-8 であろうと、 UTF-8 ->SJIS であろうと同じです。
*1と2の順番を変えたりしないように注意。
上のサンプルを実際に動かし、0.txtをHSPエディタとかで開くと、
"SJISからUTF8" という文字列が UTF-8 に変換されているため
"SJIS縺九iUTF8"
という風に化けて見えます。
次に メモ帳(XP以上のメモ帳。XP以前のOSは、Terapadとか)で開くと "SJISからUTF8" と見えるはずです。
以上がサンプルの概要です。
上記の2つのAPI関数のリストを見て
1.MultiByteToWideCharを呼ぶ->2.WideCharToMultiByteを呼ぶ。
という流れと照らし合わせると、上記サンプルではMultiByteToWideCharでオプションを0(=ANSI),WideCharToMultiByteではオプションを65001(=CP_UTF8)としていることがわかります。
UTF-8 -> SJIS のやり方が少し見えてきましたか?
UTF-8 -> SJIS にするには
結論から言うと上のサンプルでは、
1.変数chrにUTF-8の文字列を読み込ませ、MultiByteToWideCharのオプション prm.0 を65001 (CP_UTF8)にします。
2.WideCharToMultiByteのオプション prm.0 を0 (CP_ACP)にします。
要するに MultiByteToWideChar では読み込ませる文字コードを教えてあげて、WideCharToMultiByte では変換したい文字コードを指定すればいいわけです!
上のサンプルの便利な使い方。
一度そのまま実行します。UTF-8で書かれた0.txtができます。
chr= "SJISからUTF8" をコメントアウトし、すぐ下の//*以下のコメントをはずします。notesave "0.txt" もコメントアウトし、すぐ下の//*以下のコメントをはずします。"UTF-8 -> SJIS にするには"の手順に従ってそれぞれのprm.0を65001と0にします。
実行します。
これで SJIS -> UTF-8 , UTF-8 -> SJIS を実際に試すことができました。
資料を探すにあたって以下のソフトウェア、書き込み、サイトを参考にしました。
xiさん ChopSticks 1.1、HSP BBS 過去ログ 04/07/17 イドさん、ちょくとさん "Win32 API関数リスト"
|