Unicodeまわり

Unicode関連の読み書き処理を書いた。
今日は、UTF-16関係と、UTF-8関係の処理。


バッファの仕様変更


各DLLごとの専用の領域は、当初はアプリ・DLL間で使うバッファ構造体に確保していたのだが、これだとI/Oが共通という難点があった。
これだと色々と困ったので、別の構造体、現在の符号系の情報構造体に、これを移動した。
これは入力と出力で分けられている。
ここに、バッファG0~G3、C0/C1で計6個分の配列を確保した。一応動いているようだ。

元々これはDLL内ではリードオンリーを想定していたので値渡しだったのだが、これを全部ポインタ渡しに変更するなどをしている。

なお、バッファはDLLごとに全く仕様が違う。そこで、CCSが決まったところで、専用のバッファ初期化APIを全バッファに対して実行する。

入力(Encode)はDLL APIを呼ぶときにバッファ番号を引数に付けるけど、出力(Decode)は無いので、内部では強制的にGRにあるもの、つまり符号として0xa1~0xfe辺りに対応しそうなものを採用している。



現在のフラグ構造体中身だが、Unicodeで現在管理するフラグは、BOMを吐いたか、エンディアン、サロゲート対応か、CESU8サロゲートか、といった辺り。今後増えるだろう。

日本語はまだ細かく決めていないが、~を全角チルダ(U+FF5E)にするか波線(U+301C)にするかの選択とか、\を円にするか\にするかとかのフラグが必要になりそうだ。


なお、標準として、6個の各バッファごとに128バイトを確保し、これをキャストして使用することとした。不足した場合のために、拡張バッファサイズ取得APIなんてのも予約で用意してある。今のところ、使う場面が想定できないが。


UTF-16


今日は、UTF-16(基本はビッグエンディアン、Windowsのはリトルエンディアンだけど) と、BOMの無いUTF-16BE/UTF-16LEの入出力に対応。
Windows用のが吐けるように、UTF-16-BOMLEという専用の符号名を用意したので、取り敢えず支障は無いと考えられる。
なぜ主流のWindows方式でないのかと思われそうだが、「ネットワークバイトオーダー」は「ビッグエンディアン」なのであり、UTF-16は基本はビッグエンディアンと決まっているのです(本当だよ)。

おまけで、U+0000~U+FFFFの範囲内限定のUCS-2にも対応しておいた。使い道なさそうだし、今のところビッグエンディアンしか想定していない。


UTF-8


更に、UTF-8の入出力に対応。
BOMのあるUTF-8と無いUTF-8N( この名は日本での通称だが、公式ではない)に対応。
更に「変なもの」として、オラクルのCESU-8や、SunのjavaのModified UTF-8の入出力にも対応しておいた。こういう変なのは今後無くす方向でお願いしたいのだが。

といいつつ、いずれEBCDIC対応時には、UTF-EBCDICにも対応予定である。


今後の予定


そのうち、UTF-32/UTF-32BE/UTF-32LEも、UTF-16と同様にして実装予定。

このほか、UTF-5、UTF-6、UTF-7なんかの対応も必要…なんだろうか。良く分かりません。
UTF-7はMozilla Firefoxが対応しているので、これは対応するべきだろうか。

あと、UTF-16は現在は旧RFC準拠で、31ビット全領域に対応しているけど、16面までに制限した方がよいのであろうか。この場合、古い方はどう呼べばいいのだろう。やっぱりRFC2279とかであろうか。

2008/11/18(火)17:25 |Comments(0) |Trackback(0)

製造開発 | プログラミング | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

JIS X 0213への対応開始 ホーム UTF-8とUTF-16読み込みも対応してみた
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterツイッター

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR