プログラマーの常識をJavaで身につける (6)
‘愛’で学ぶ文字コードと文字化けの常識
NTTデータ ビジネスブレインズ
伊賀敏樹
2007/6/21
■ メールにおける文字化け
〜なぜ、友人からの絵文字メールは読めないのか?
日本語メールの文字エンコーディングは歴史的な経緯からISO-2022-JPエンコーディングがよく利用されています。IANAの登録を検索すると、ISO-2022-JPからRFC 1468(JISコード)にたどり着きます。RFC 1468には、符号化文字集合について、下記のように記載があります。
- ASCII
- JIS X 0201-1976
- JIS X 0208-1978
- JIS X 0208-1983
「正しい」符号化文字集合を処理するためには、これら符号化文字集合に含まれる文字のみをISO-2022-JPエンコーディングしてメールで送付する必要があります。これら符号化文字集合に含まれない文字を送ると、文字化けが発生する場合があります。
ところが、困ったことにWindows用メールソフトのいくつかはISO-2022-JPエンコーディングをかたってISO-2022-JPの符号化文字集合に含まれない文字も送付可能な仕様になっています。デファクトスタンダードのメールソフトにおいて、そのような仕様になっているのが、余計に困るところです。
また、いくつかの携帯電話メールもISO-2022-JPの符号化文字集合に含まれない文字を送付してしまう仕様になっています(絵文字)。しかし、現在の日本語メール環境で最もサポートされている文字エンコーディングはISO-2022-JPなので、ISO-2022-JP以外の文字エンコーディングを使いたくないという事情もあります(メール受信側でサポートしない文字エンコーディングを与えると、確実に文字化けしてしまうからです)。
「無理が通れば道理が引っ込む」状態なのです……。早く日本語メール環境の大多数がUTF-8を適切に扱えるようになればいいのですけれどもね。
■ Webブラウザにおける文字化け
Webブラウザにおける文字化けも、頭の痛い問題です。HTMLを表示する際には、METAタグの文字エンコーディング指定とHTMLタグのLANG属性があれば適切に動作するはずです(もちろん、文字エンコーディング指定が「正しい」指定であることが必要です)。しかし、一部のWebブラウザはこれらの指定を誤認して文字化けを起こす場合があります。HTMLが正しく記述されていても、Webブラウザの実装にバグがあって誤認されて文字化けが発生する場合があるのです。
さらに、HTMLからPOSTする際にも文字化けを起こす可能性があります。ウェブブラウザが適切な文字コードでPOSTしたうえで、サーバプログラム側で文字コードを適切に処理できる必要があるからです(そして、それぞれに不具合が混入する可能性があります)。
■ フォントが異なることに起因する文字化け
〜Windowd Vistaの問題点
フォントが準拠する規格が異なるために文字化けが発生する場合があります。最近世間を騒がせたものとして、Windows VistaとWindows XP以前との間で表示/印字される文字の形が変わるというニュースがありましたが、これは、Windows VistaのフォントがJIS X 0213:2004に対応したことによるものです。詳しくは、「Vistaのフォント違いによる文字化け」などをご覧ください。
文字化けを改善するためには?
このように、私たちがプログラミングに従事していくうえで、文字化けが発生し得るポイントが数多くあります。そして、困ったことにそれらは複数が重なり合う場合があります。
あなたがもし文字化けに遭遇してしまい、それを改善したいと思った場合には、まずどのようなことがどこで発生しているのかを調べることが重要だと考えます。文字化けの原因が分かれば、関連する規格や標準を調べてみることから状況改善につながる期待が持てます。
ネットワークが関連する文字化けの場合には、ネットワークキャプチャ(プロトコルアナライザとも呼ばれる)などのツールを利用することによって発生している現象が把握できる場合があります(ただし、ネットワークキャプチャのようなツールは ネットワークによっては利用が制限されている場合もあります)。
あなたがプログラミングしている個所での文字化けの解析には、この記事で紹介したような方法を活用してロギングを行うこともできます。実際の文字コードの値を収集することにより原因究明が進む場合があります。
文字化けは、再現性があれば何かしらの原因究明ができると思います。場当たり的な対処をせず、内容をはっきり把握したうえで対応していきたいものです。
文字化けをより深く知るための参考書籍
この記事では、文字コードの話題を扱ってきましたが、文字コード自体、難易度が高いうえに掲載ページ数の都合などで、どうしても説明が舌足らずなものになってしまいました。皆さんが文字コードについて掘り下げて学びたいと思ったときにオススメの参考書籍をいくつか紹介します。この記事執筆の際にも、これら書籍を参考にさせていただきました。
■ 文字コードの基本
まず、皆さんが文字コードを基本から学びたいという場合には、『文字コード超研究』を推奨します。分かりやすい文章で書かれたこの本を一通り読み進めることで、文字コードに関する基本を学習できるようになっています。
■ 文字コードの歴史
文字コードを理解するうえで、文字コードの歴史を知っておく必要が出てくる場合があります。歴史や経緯故に、その文字コードが使われている場合などが存在するからです。文字コードの歴史を知るうえで有益なのが、以下の2冊です。
■ 文字コード処理に関する重要な書籍
表紙の絵から「フグ本」の愛称で呼ばれる、文字コード処理に関する重要な書籍があります。それが、『CJKV日中韓越情報処理』です。日本語情報処理に関する情報をたどっていくと、この本に行き当たることが多々あります。また、この本はいくつかの国の言語に翻訳されているので、ほかの国の人と日本語情報処理に関する情報を共有していくうえでも、有益です。
@IT関連記事
- Java TIPS 「サーブレット2.3における文字エンコーディングの指定」
- Java TIPS 「サーブレット2.2における文字エンコーディングの指定」
- Java TIPS 「文字コード宣言をフィルタで共有化する」
- Java TIPS 「リソースファイルの内容が文字化けする場合には」
Java Solution FAQ
「Java
Solution」フォーラム |
Javaの文字化け対策FAQ JSP/サーブレット・プログラミングで誰もが一度は遭遇するトラブルが文字化けだ。4回の連載で文字化け解消のポイントを解説する 第1回 Webブラウザが文字コードを判定する基準は? (2004/12/25) 第2回 JSPで特殊文字が文字化けする場合の対処方法 (2005/1/14) 第3回 DBや入力フォームで文字化けする場合の対処方法 (2005/2/11) 第4回 JSPのインクルードに関連する文字化けを解消 (2005/3/12) 連載各回の解説はこちら |
文字化け“???”の法則とその防止策 [連載]事例に学ぶWebシステム開発のワンポイント(8) アプリケーションサーバ上での開発で誰もが悩むのが日本語の文字化けだ。文字化けのしくみとその対策を解説 「Java
Solution」フォーラム 2003/1/28 |
Eclipseで文字符号化の理解を深める EclipseでJavaに強くなる(6) コンピュータの内部では文字を数値化(文字符号化)して扱っている。その理屈をEclipseでプログラムを実行しながら理解してみよう 「Java Solution」フォーラム 2006/7/22 |
Open
Laszloで日本語を表示してみよう Open Laszloを使って作るリッチクライアント(2) オープンソースで提供されているリッチクライアントのOpen Laszlo。インストールが完了したら日本語を表示させよう 「Web
Client & Report」フォーラム 2005/4/28 |
Unicodeでも発生する文字化けの危機と回避 連載 XMLを学ぼう(6) XMLでは、文字コードの相違などによる文字化けを防止する仕組みが備わっているが、それでも文字化けを完全に封じ込めることはできていない 「XML & SOA」フォーラム 2000/10/24
|
4/4 |
Index | ||||||||||
|
プロフィール |
伊賀 敏樹(いが としき) ハンドル:いがぴょん ホームページ いがぴょんの日記ウェブページv2(1996年から続けているWeb日記) 所属団体 blanco Framework(コミッタ) 主な著書 「やさしく学ぶ基礎からのJDBC」 「Javaプログラミング[アプリケーション編]ステップアップラーニング」 |
プログラマーの常識をJavaで身につける バックナンバー
ご意見、ご感想はJava Solution 会議室へどうぞ |
Java Solution全記事一覧 |
- 技術者が知っておきたいTomcat 7の新機能20連発 (2011/6/24)
6から変わっていない点と併せて、バージョン管理やメモリ管理、セキュリティに関する変更点など厳選して紹介 - いまさら聞けないHadoopとテキストマイニング入門 (2011/6/21)
それぞれの概要や構成、MapReduceの仕組み、Hadoopの活用場面などを解説し、Hadoopの実行環境を構築します - AWSの自由自在なPaaS「Elastic Beanstalk」とは (2011/6/15)
Javaアプリをデプロイ後即起動できる無料クラウドサービスについて特徴やEclipseプラグインの使い方などを紹介。Railsにも対応予定 - Tomcat 7も対応したServlet 3.0の変更点 後編 (2011/6/10)
非同期処理や、認証用APIとセキュリティ制約の追加、JSESSION Cookie、マルチパート対応について解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
- - PR -