[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>文字コード]] * 目次 [#iecfa933] #contents *概要 [#ic88c7f2] -エンコーディングとは【encoding】(エンコード) - 意味-解説-説明-定義 : IT用語辞典~ http://e-words.jp/w/E382A8E383B3E382B3E383BCE38387E382A3E383B3E382B0.html --情報を一定の規則に従ってデータに置き換えて記録すること。 --ある形式のデータを一定の規則に基づいて別の形式のデータに変換すること。 --(文字エンコーディングだけでなく、)データ圧縮や暗号化などもこれに含まれる。 余談:・・・となると、 StreamにDecorateパターンを適用する~ 殆どの処理が=エンコーディングと言う事になる。 *文字エンコーディング [#k469d460] ココでは各種、文字エンコーディングの情報を纏めています。~ 「外字」については、「[[Windowsの外字]]」を参照下さい。 文字エンコーディングとは、文字列データを、~ 異なる文字コード(コードページ)を使用したバイト表現に変換することである。 -文字コード - Wikipedia~ http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89 -コードページ - Wikipedia~ http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8 **文字化け [#p3e0993b] 文字化けは、一般的に、 -エンコーダに適切な文字コード(コードページ)を指定していない -プラットフォームやユーザ間で使用している外字が異なる -コードページによっては、変換が不可逆なケースがある 際に発生します。 文字コード(コードページ)指定を大きく誤っている場合は、すぐ気が付くのですが、 -UTF-16(Unicode) -UTF-8 -Shift JIS -EUC-JP 一部だけ文字化けする場合のトラブルシュートは苦戦することが多いです。~ 一部だけ文字化けするパターンは以下の様に分類できると考えます。 -文字コード(コードページ)指定を大きく間違えていない(微妙に間違っている) --例えば、Shift_JISの亜種のコードページ指定を誤っている。 ---ISO-2022-JP ---Microsoftコードページ932(CP932) ---MacJapanese -外字領域の定義(見た目)が異なっている。 --この場合、データのエンコード自体は正しく行われている。 --人間にとっての見た目が、異なっているため文字化けと感じられる。 --外字についてはこちらを参照:「[[Windowsの外字]]」 ***ポイント [#t36d3f53] 従って、以下に注意を払う必要があります。 -プラットフォーム --実装されている文字コード(コードページやフォント) --適用される標準のエンコーディングが何か? --フォントや外字がインストールされているか? -エンコーディングが動作する箇所 --ファイルI/O --SGML文書のI/O ---HTML出力 ---XML入出力 --ファイル転送(プロトコルに実装されているケース) ---SFU(Microsoft Windows Services for UNIX) ---FTP(ASCIIモード) --データベースのI/O~ Unicode文字列以外のフィールドから入出力する場合、~ 通常、照合順序で指定したに対応した文字コード(コードページ)~ を使用して、エンコード・デコードされる。 ***事例1 [#z9c60131] プラットフォームに実装されている文字コード(コードページやフォント)に起因する文字化け。 -Microsoftコードページ932 - Wikipedia~ http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932 --インターネット上での Windows-31J の利用について ~ NEC 特殊文字・IBM 拡張文字 ---IBM 拡張文字等の Windows-31J 独自追加の文字は、~ 他の JIS X 0208 非登録の CJK統合漢字に比べて、~ 異機種(OS / アプリケーション)間でのデータ交換を、~ 文字化けを起こしたりせずにデータのやり取りが正常に行える確率が高い。~ ---しかし、JIS X 0208 非登録の文字をサポートしない環境があることを考えると、~ JIS X 0208 登録文字だけを用いてデータ交換を行った方が、問題が起こりにくい。~ --JIS X 0208 - Wikipedia~ http://ja.wikipedia.org/wiki/JIS_X_0208 -Windowsの機種依存文字 - CyberLibrarian~ http://www.asahi-net.or.jp/~ax2s-kmtn/ref/mdc.html --NEC機種依存文字 --NECのIBM拡張文字 --IBM拡張文字 ***事例2 [#z9c60131] プラットフォームで適用される標準のエンコーディングに起因する文字化け。 -@IT:事例に学ぶWebシステム開発のワンポイント(8)~ http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html#ap04 --.NETでは標準で、Shift_JIS=MS932となるが、 --Javaでは Shift_JIS ≠ MS932となるため、 ***事例3 [#v6a83d1c] フォントや外字のインストール状況に起因する文字化け。 -こちらを参照:「[[Windowsの外字]]」 ***事例4 [#m5c42a6a] コードページによっては、変換が不可逆なケースがある。 -JA16SJIS→Unicode方向への変換において、~ Unicodeの文字データにU+FF5Eが渡されると0x8160に変換される。 -逆向きのJA16SJIS→Unicode方向への変換において、~ JA16SJISの入力データに0x8160が渡されると、U+FF5EではなくU+301Cに変換される。 この変換はあくまでもUnicodeからJA16SJIS方向への片方向の変換においてのみ適用される。 **コードページ [#bc82ba26] -サポートするコード ページ~ http://msdn.microsoft.com/ja-jp/library/aa288104.aspx -Microsoftコードページ932 - Wikipedia~ http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932 --CP932の呼称(別名)の整理 ---Windows-31J~ Windows 3.1 (J) のリリースに合わせて、マイクロソフトが~ IBM と日本電気 (NEC) のコードを統合して作った符号化文字集合。~ 1993 年以降、マイクロソフトが自社のドキュメント等で「CP932」という用語を使って~ 表している対象は、常にこの「Windows-31J」である。この名前は IANA に登録されている。 ---MS932~ Java で、「IBM のコードページ 932」と「Windows-31J」を区別するための用語。 ---CP932~ MS-DOS と Windows における日本語コードページを表す用語。~ 「Windows-31J」が制定されるまでは、OEM ベンダによって文字集合が違う。 ---MS 漢字コード~ 「CP932」とほぼ同じ意味の用語である。~ マイクロソフトが(Shift_JIS という符号化方式を)策定したという点や、~ マイクロソフトが(JIS X 0208 という文字集合に対して)文字を独自に追加した点を~ 強調したい場合に用いられる。また、単に「シフト JIS」のことを指している場合もある。 ---OEM コードページ 932~ Windows 3.1 日本語版の発売以前における、OEM ベンダ各自の拡張を許した仕様の文字セット。~ 以下は、マイクロソフトから離れ、現在では公的機関からも認められた文字符号化方式を指す用語。 ---シフト JIS~ JIS X 0208 符号化文字集合を一定の規則に従ってシフトした文字符号化方式。~ 具体的な内容は JIS X 0208:1997 に「シフト符号化表現」として記載がある。~ しかし、文脈によってはベンダ拡張されたコードセットを指している場合もある。 ---Shift_JIS~ 「シフトJIS」の IANA 登録名。 ---SJIS~ Shift_JIS の短縮形。Java では Shift_JIS と同義語。 *その他のエンコーディング [#mc2b1e24] **SGML文書 [#r703ca21] ***HTMLエンコーディング [#j4b173f8] 文字参照(数値文字参照・文字実体参照)のエンコーディング(エスケープ)を行う。 -文字参照 - Wikipedia~ http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7~ 直接記述できない文字や記号をHTML・XML上に表記、参照するため用いられる方法。 --マークアップで使われる、半角の不等号「<」や「>」 --指定の文字コードで表現できない文字を表記、参照する。 --表記方法により「数値文字参照」と「文字実体参照」の二種が存在する。 ---数値文字参照~ 10 or 16進数で該当文字をISO 10646の文字番号で指定する方法。~ 指定の文字コードで表現できない文字を表記、参照する。 ---文字実体参照~ 特定のキーワード文字列で該当文字(主にマークアップで使われる文字)を指定する方法。~ XSS(クロスサイト・スクリプティング)対策としても使用される。 ***HTMLの文字エンコーディング [#kd04f009] HTTPヘッダか、metaタグにエンコーディングを指定することで~ WWWブラウザがデコードする際に指定する文字コード(コードページ)を指定する。 -HTTPヘッダ~ Content-Type: text/html; charset=Shift_JIS -metaタグ~ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -@IT:Javaの文字化け対策FAQ(1)~ http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html --質問1:Webブラウザが文字コードを判定する基準は何ですか?~ HTTPヘッダか、metaタグにエンコーディングを指定 --質問2:pageディレクティブで文字コードを正しく指定する方法は?~ CGI毎、HTMLを出力する際に指定する方法が存在する。 ***XMLの文字エンコーディング [#o9fc86c4] ヘッダ部分の記述をDOMが理解して自動的にエンコード・デコードします。 <?xml version="1.0" encoding="Shift_JIS"> **URLエンコーディング [#b1f1b87f] -概要 --URIにおいて使用できない文字を使う際に行われるエンコード(エスケープ)を行う。 --RFC3986のSection 2.1で定義されている。 -利用シーン --Query String経由でデータを受け渡す場合にも使用する。 -参考 --パーセントエンコーディング - Wikipedia~ http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0 **Base64エンコーディング [#oa0474fc] -概要 --Byteデータと文字列の相互変換を行う。 -利用シーン --ByteデータをTextベースのプロトコル(SMTP,HTTP等)に乗せる場合に使用する。 -参考 --Base64 - Wikipedia~ http://ja.wikipedia.org/wiki/Base64 *各種フォーマット [#c854680b] **Excelが開くことが可能なCSVファイル [#g630991c] CSVファイルを扱い際は、以下のことに気を付ける。 Excelにて文字化けやエラーが発生せず読み込めるCSVファイルは、 以下の2種類のエンコードのファイルである。 -BOM付きUTF-8 -各言語(国)のANSIコード CENTER:各言語(国)のANSIコード(一例) |#|言語|文字セット名|codepage| |1|日本語|Shift-JIS|932| |2|英語(米国)|Windows-1252|1252| |3|英語(英国)|Windows-1252|1252| |4|フランス語(フランス)|Windows-1252|1252| |5|スペイン語(スペイン)|Windows-1252|1252| |6|繁体字中国語|big5|950| |7|簡体字中国語|gb2312|936| |8|韓国語|ks_c_5601-1987|949| Excel上でCSV形式で保存すると、ANSIコードで保存される。 *参考 [#we46c77c] -文字化けしないようにするには~ http://www.tohoho-web.com/wwwxx005.htm -Oracleトラブル対策の基礎知識(6):~ 文字化けに関するトラブルに強くなる【実践編】 (1-4) - @IT http://www.atmarkit.co.jp/ait/articles/0903/04/news115.html ---- Tags: [[:.NET開発]], [[:文字コード]], [[:国際化対応]]