UTF-7

今回、UTF-7の入出力に対応しました。

UTF-7について


Unicodeの符号化には様々な方法があります。

Unicode、ISO/IEC 10646というのは文字集合(CCS)の規格ですから、これをどう符号化(CES)するかは、課題の一つです。

元々はUTF-1なるものがあり、規格書に仕様が掲載されていましたが、見向きもされなかったようです。私も見たことがありません。
16ビットの文字コードをそのまま符号として使い、それの拡張としていまはUTF-16があります。
また後に、UTF-2として現在のUTF-8が作られ、そして普及しました。
この流れの中で、UTF-1は規格書からひっそりと削除され消えていったのです。
(※ UTF-1については、8月26日に改めて記載しました)

この流れとは別に、UTF-7は作られたようですが、実際に使われた例はあまりないようです。
電子メールとの親和性が高いとのことですが、現在は、UTF-8をMIMEエンコードするのが推奨されておりますので、このような妙な符号を使う理由がないのでしょう。

いわんや、文書ファイル特にHTMLファイルのようなものでUTF-7を使う理由などゼロですが、Webブラウザーはどういうわけか対応しているものが多い。何らかの需要があるのかもしれません。


UTF-7の機構


UTF-7は、base64と同様の符号化方法を採用した符号です。

base64は8ビット3文字を、6ビット4文字に変換する24ビット単位の符号ですが、UTF-7はこれをUTF-16の1バイト(16ビット)を単位に扱いますので、Unicode 1.5文字がbase64集合の4文字に変わることになる。Unicode3文字がbase64集合の8文字です。

base64の場合、かならず字数を維持し、最後に余ったところは = で穴埋め(パディング)しますが、UTF-7の場合は何も付けません。
変換された部分は、+から始めて、文字列が途絶えたり、base64集合以外の文字が来たり、最後の合図であるマイナス(-)が来たところまでをbase64集合で変換し、その後はふたたびASCIIの状態になります。

このため、一見簡単そうですが、実際はかなり実装に難儀しました。


内部の話


この項は内部の話なので、興味が無い人は読み飛ばして下さい。

gTefの場合、エンコード(外部→内部)の実装が特に苦労しました。
元々、このような場合に備えた設計があったので、実装には成功しましたが、かなり苦戦。
基本的にDLLのエンコーダーは任意バイトを読み取って1文字を返す処理ですが、UTF-7の場合、UTF-7の文字列を8文字読み取ったところでUnicodeが3バイト(最大3文字)出来てしまうので、このあたりの制御が必要となったわけです。
複数文字を返す処理は、以前実装していたので、この機能を用いることで解決できました。

最後まで難儀したのは、改行とファイル末端まわりです。base64集合の途中でファイルが終わったりすると、その後の処理が難しい。
また改行があると、CR/LF/NELの変換処理を回さないといけないため、この辻褄合わせにも難儀しました。一度に3文字まで返しますが、改行はこの文字を全部返し終わった後で入るので、このためのフラグ制御が増えました。



デコード(内部→外部)は、最初に作りましたが、これは比較的簡単にできました。
ただUnicodeを3バイト読み取ってから処理することになるので、やはり途中で終わってしまった場合などの処理が存在しています。


Webブラウザー


OperaはUTF-7対応らしいのですが、どうやっても表示できませんでした。意味が良く分かりません。

一方、Firefox 3.5やIron、IE7は、エンコード名一覧に無いので期待していませんでしたが、HTMLにして、MetaのContent-Typeにのcharsetに"text/html;charset=utf-7"と記載すると、無事に表示できてしまいました(プレーンテクストでは表示させる方法がありませんが)。

またFx3.5とIE7では、charset=unicode-1-1-utf-7 のような記述でも表示できました(Ironでは表示不可)。

Operaはどの方法でもダメでした。どうしたのでしょう。

2009/08/25(火)23:00 |Comments(0) |Trackback(0)

文字 | ソフトウェア開発 | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

UTF-1 ホーム Webの動作確認環境
トラックバック

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

カレンダー

09 | 2017/10 | 11
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