2015年2月24日火曜日

Unicode処理③::UTF16(Unicode)をUTF8に変換する。実装編


実際にC言語でコードを書いて見る。




実行結果










上の文字列は、UTF16でエスケープ表記されているサロゲートペアである
\uD842\uDF9F  (Unicode値 : 0x20B9F)
を文字列として与え、それをUTF8のバイナリ(0xF0 A0 AE 9F)に変換した結果になります。

下の文字列は、UTF16でエスケープ表記された
あ : \u3042 : (Unicode値 : 0x3042)
を文字列として与え、それをUTF8のバイナリ(0xE3 81 82)に変換した結果になります。

関数の
        in_ReadSize   : 実際に読み込んだ文字列のサイズ(Byte)
        out_WriteSize : 実際書き込んだ文字列のサイズ(Byte)
は、実際の実装においては大抵必要になるかと思いますが、
今回はサンプルの簡略化のため使用していません。


実行環境は x64windows7pro VisualStudio2012 上です。
また、関数の方は、この環境の上のVirtualBoxで走らせたCentOS7上でも動作を確認しました。

windowsのコマンドプロントは、デフォルトの文字コードがUTF8では無いので、
実行結果は16進数表記にしてあります。

また、
char str_in[]="\\uD842\\uDF9F";
のように \ を表現したい場合は、エスケープさせて '\\' としなければいけない事に注意してください。

Blogger上で表示する関係上、tabをspace8個に置換処理しています。
必要な方は、
http://ux.getuploader.com/ADMIS/download/65/4ByteStringTo2ByteBinary_Ver00.01_02.zip
からソースをダウンロードしてみて下さい。

最初 前回

0 件のコメント:

コメントを投稿