UTF-8 でエンコードされたWikipedia日本語版の「文字化け」の記事をWindows-1252 として表示したときの文字化け
文字化け (もじばけ)とは、コンピュータ で文字 を表示する際に、正しく表示されなくなってしまう現象のこと。
例として「文字化け」が、「 æ–‡å—化㑠」や「譁?ュ怜喧縺」と表示されるなど。
「文字化け」という言葉は、コンピュータ環境で原則としてマルチバイト文字 を使用しない欧米 等のラテンアルファベット 使用言語においては該当する用語が存在しなかったことから、日本語 の “Mojibake ”という言葉がそのまま通用するようになった。→#Mojibake
主な原因
ソフトウェア やハードウェア の不具合 (trouble)、文字コード の違い、エンコーディングとデコーディング の不一致、文字フォント の違いなどが原因となる。パソコン通信 の時代は、ハードウェア上の文字化けが頻発した。インターネット の普及後は、運用系(オペレーティングシステム )、ブラウザ 等ソフトウェアに起因する文字化けがある。
文字コードの大きさ
1バイト文字 だけを表示しようとするシステム、2バイト文字 だけを表示しようとするシステム、国際規格に対応するすべての文字を表示しようとするシステムなど、どの大きさの文字コードが表現できるかの違いが存在する[ 1] [ 2] 。
文字コードの違い
文字コードによっては表現できる文字の範囲、表示できる他の言語の文字など違いがある。そのため、特定の文字コードで表現できていた文字列を、他の文字コードで表現しようとすると、対応処理の誤り、対応する文字が存在しないことなどから、文字を表現できない。
文字化けしたメール例
Unicode(UTF-7)
���̃�� (�q���Y�_�C�G�b�g)
Shift_JIS
縺薙・繝。繝シ繝ォ縺ッ 繝シ縺ョ逧・ァ倥∈縺ョ繝。繝・そ繝シ繧ク縺ァ縺吶€・
Unicode(UTF-8)
このメールは 皆様へのメッセージです。
Latin-1
ã?“ã?®ãƒ¡ãƒ¼ãƒ«ã?¯ Šãƒ¼ã?®çš†æ§˜ã?¸ã?®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã?§ã?™ã€‚
US-ASCII
c c .c !c <c +c / c c c <c .g f' c 8c .c !c c ;c <c 8c 'c c
アラビア語
ك?“ك?كƒكƒكƒك? كƒك?هš†ن˜ك?ك?كƒكƒƒك‚؛كƒك‚ك?ك?™ك€‚
文字コードの実装
文字コードによっては既に割り当てられている文字の変更を許容していたり、新たに任意の文字を割り当られる拡張領域を設けているものがある。また、文字コードのアップデート(仕様変更)によって字形が変更されることがある。同じ文字コードでもどの実装が採用されているかによって、表示が異なったり表示ができなかったりする。
エンコーディング
1バイト 文字と2バイト 文字を同時に表示しようとするシステムでは、前から後ろへの検索においては、1バイトと2バイトの違いが確認できる。後ろから前への検索においては、1バイトと2バイトの違いが確認できる文字コードと確認できない文字コードがある。そのため、タグ付き文字列の場合には、これらの処理の違いを確認できるような文字コード、文字フォントに対するタグをつけることがある。エスケープシーケンスも、ここではエンコーディングに分類する。
文字フォントの違い
文字フォント によって、表現できる文字の範囲に違いがある。そのため、オペレーティングシステム (OS)、ソフトウェア (ブラウザ等)が対応できる文字フォント、あるいは導入済みの文字フォントの種類によって表現できないことがある。1バイト文字には1バイト文字フォント、2バイト文字には2バイト文字フォントを別々に指定できるソフトウェアもあるが、画一的に1種類の文字フォントしか指定できないソフトウェアもある。
特定の機能指定
ファイル名、フォルダ名などで、ソフトウェアでは2バイト文字を使うと文字化けすることがある。これは、特定の機能が、1バイト文字を想定した設計になっている場合か、2バイト文字であっても特定の文字集合だけを想定した設計になっている場合である。
文字切れ
2バイト文字などを想定せずに設計したソフトウェア、通信機能では、文字の長さに制約があり、2バイト文字で表現した場合に、タグ、エスケープシーケンス、拡張符号などの挿入により、制限で指定している文字列の長さより短い状態で文字切れすることがある。また、この文字切れが2バイト文字の1バイト目で終了している場合には、それ以降の文字表現が文字化けすることがある。
主な現象
表示時のエンコーディングの指定に関するトラブル
UTF-8 でエンコードされたWikipedia日本語版メインページ(2008年8月時点) をISO-8859-1 として表示したときの文字化け
指定ミスの場合
文字データを間違ったエンコーディングで表示しようとしたために、正しく表示できなくなる場合がある。
ISO/IEC 646 で規定されている文字だけは、Shift_JIS 、EUC-JP 、ISO-2022-JP 、ISO-8859 、UTF-8 などにおいても同じ符号位置 で登録されている。従って、ISO/IEC 646の範囲外の文字だけが化けてしまう場合には表示時のエンコーディングの指定ミスである可能性が高い。
プロトコル ごとのヘッダに文字コードの情報を付加して転送することや、Unicode の場合にはBOM をつけることなどの方法で文字化けしないようにすることが勧められる。
表示側非搭載の場合
文字表示アプリケーション(WWWブラウザ 等)によって、表示可能なエンコーディングが限られていることがあり、指定ミスと同様の状態に陥り文字化けが発生する。Unicodeのサロゲートペア(代用対) 表示に対応していない環境もいまだもって多いため、基本多言語面 に非搭載の文字を利用した場合に正しく表現できず文字化けすることがある。
搭載フォントセットの違いによるトラブル
フォント が不足しているために漢字 部分が文字化けしている
機種依存文字を使用することによるトラブル
Windows 環境とMacintosh 環境で文字データを交換する際、共通に使用可能な文字符号化方式であるShift_JIS を用いていた場合、それぞれが独自に拡張した文字(機種依存文字 )を持っている。これら文字を使用していた場合は意図しない文字として表示されてしまう場合がある。
各フォントセットの文字集合実装レベルの違いによるトラブル
UTF-8 のような多くの文字が表現できる文字符号化方式を利用した場合、機種毎のフォントセットの実装により、使える文字の数が限られており、搭載していない文字が化けることがある。機種AではUnicode全体を表せるフォントを搭載しているが、機種BではJIS X 0208 の範囲の文字をUnicodeの符号位置で搭載していて、符号化方式としてUTF-8が使えるだけであった等の場合が考えられる。
EUC-JP では2面の文字が入ってくるが、一部の環境では対応していないため該当領域の文字が文字化けを起こす。
ユーザー外字を使用したことによるトラブル
ユーザーがWindows-31J やUnicode の私用領域 に対して、独自に外字を登録して使用した場合、その符号位置に同じ文字が入っていない環境では文字化けが発生し、このようになる。外字→�。そもそも外字を相手に送った場合、その相手はブルースクリーン もしくはOS のハングアップ につながる恐れがあります。
フォントメーカー独自の特殊なフォントを使用することによるトラブル
Dingbatなどの記号フォントや、文字コード内の一部の文字を仕様とは異なる文字を実装したフォントを利用してフォントを埋め込まないファイルにし、該当のフォントが入っていない環境で表示した場合に文字化けが発生する。
搭載フォントのUnicodeのバージョン の違いによるトラブル
Unicode では、Unicodeのバージョンによっては同じ符号位置に異なる文字が登録されていることがある。ドキュメントのフォーマットではどのバージョンのコードであるかを判別する手段を持っていないため、バージョンを判別することができず、また、特定のバージョンのみしか対応していない環境がほとんどであるため、同じ符号位置の文字であっても、環境を変えると全く違う文字で表示されることがある。
また、バージョン2.0以降から使われるようになったサロゲートペア(代用対) に対応していないフォント環境もいまだもって多いため、基本多言語面に非搭載の文字を利用した場合に正しく表現できず文字化けすることがある。
文字エンコーディングの変換に関するトラブル
Unicodeマッピングが規定と異なることによるトラブル
Windowsなどの一部の環境ではUnicode とJIS X 0208 とのマッピングにおいてJIS X 0221 の規定と異なるルールを使用している(波ダッシュやマイナスなど)ため、文字化けの原因となる。
プログラムの日本語対応の甘さによるトラブル
Shift_JIS を内部コードに利用するアプリケーションでは、エスケープシーケンス の取得の仕方に一工夫必要である。ところがそれがなされていないため問題となる場合がある。海外のアプリケーションの日本語 対応時に特に現出しやすい。
Shift_JISにおいて、2バイト目が0x5c (日本の円記号 、ASCII ではバックスラッシュ )となる文字(「申 」「能 」「表 」など、俗に言う「ダメ文字 」)の場合、2バイト目の0x5c がエスケープ を意味する制御文字 として動作することがあり、正しく表示できなくなる場合がある。
通信経路でのトラブル
通信や記録の段階で、文字データの一部が欠落・変質してしまった結果として、文字データが意味不明な文字列として表示されてしまうこともある。
表示能力の無いアプリケーションを利用した場合のトラブル
ワープロソフト で独自のフォーマットを使用して保存したファイルを、別のワープロソフトやテキストファイル しか読み込むことができないアプリケーションで開いた場合に文字化けが発生する。ワープロソフトによってはバージョンが異なるだけで文字化けを起こすこともある。
文書ファイルでないファイルをワープロソフトなどで開こうとした場合にも理解できない文字列として表示され、これも文字化けに含めることもある。
Mojibake
英語 など各言語では、「文字化け」を「mojibake」と日本語のローマ字 表記で使用することが定着している。
これは、米国 のアルダス で日本語版などのソフトウェアの開発を行っていた久保芳之 がページメーカー のソフトウェアを開発する過程で文字化けが発生することを説明するために「mojibake」という言葉を使用していたことが、その後Macintosh の関連業界で普及し、そのまま定着したことによる[ 3] 。
脚注
^ CJKV日中韓越情報処理,ケン・ランディ ,オライリージャパン, 2002
^ 日本語情報処理,ケン・ランディ,ソフトバンククリエイティブ, 1995
^ "漢字トーク KanjiTalk" . 2014年3月13日時点のオリジナル よりアーカイブ。2009年8月30日閲覧 。 久保芳之からの説明メールが掲載されている。
関連項目
ウィキメディア・コモンズには、
文字化け に関連する
メディア および
カテゴリ があります。