Open棟梁Project - マイクロソフト系技術情報 Wiki
目次  †
概要  †
余談:・・・となると、
StreamにDecorateパターンを適用する
殆どの処理が=エンコーディングと言う事になる。
文字エンコーディング  †
ココでは各種、文字エンコーディングの情報を纏めています。
「外字」については、「Windowsの外字」を参照下さい。
文字エンコーディングとは、文字列データを、
異なる文字コード(コードページ)を使用したバイト表現に変換することである。
文字化け  †
文字化けは、一般的に、
- エンコーダに適切な文字コード(コードページ)を指定していない
 
- プラットフォームやユーザ間で使用している外字が異なる
 
- コードページによっては、変換が不可逆なケースがある
 
際に発生します。
文字コード(コードページ)指定を大きく誤っている場合は、すぐ気が付くのですが、
- UTF-16(Unicode)
 
- UTF-8
 
- Shift JIS
 
- EUC-JP
 
一部だけ文字化けする場合のトラブルシュートは苦戦することが多いです。
一部だけ文字化けするパターンは以下の様に分類できると考えます。
- 文字コード(コードページ)指定を大きく間違えていない(微妙に間違っている)
- 例えば、Shift_JISの亜種のコードページ指定を誤っている。
- ISO-2022-JP
 
- Microsoftコードページ932(CP932)
 
- MacJapanese?
 
 
 
- 外字領域の定義(見た目)が異なっている。
- この場合、データのエンコード自体は正しく行われている。
 
- 人間にとっての見た目が、異なっているため文字化けと感じられる。
 
- 外字についてはこちらを参照:「Windowsの外字」
 
 
ポイント  †
従って、以下に注意を払う必要があります。
- プラットフォーム
- 実装されている文字コード(コードページやフォント)
 
- 適用される標準のエンコーディングが何か?
 
- フォントや外字がインストールされているか?
 
 
- ファイル転送(プロトコルに実装されているケース)
- SFU(Microsoft Windows Services for UNIX)
 
- FTP(ASCIIモード)
 
 
- データベースのI/O
Unicode文字列以外のフィールドから入出力する場合、
通常、照合順序で指定したに対応した文字コード(コードページ)
を使用して、エンコード・デコードされる。 
事例1  †
プラットフォームに実装されている文字コード(コードページやフォント)に起因する文字化け。
- インターネット上での Windows-31J の利用について ~ NEC 特殊文字・IBM 拡張文字
- IBM 拡張文字等の Windows-31J 独自追加の文字は、
他の JIS X 0208 非登録の CJK統合漢字に比べて、
異機種(OS / アプリケーション)間でのデータ交換を、
文字化けを起こしたりせずにデータのやり取りが正常に行える確率が高い。
 
- しかし、JIS X 0208 非登録の文字をサポートしない環境があることを考えると、
JIS X 0208 登録文字だけを用いてデータ交換を行った方が、問題が起こりにくい。
 
 
事例2  †
プラットフォームで適用される標準のエンコーディングに起因する文字化け。
- .NETでは標準で、Shift_JIS=MS932となるが、
 
- Javaでは Shift_JIS ≠ MS932となるため、
 
事例3  †
フォントや外字のインストール状況に起因する文字化け。
事例4  †
コードページによっては、変換が不可逆なケースがある。
- JA16SJIS→Unicode方向への変換において、
Unicodeの文字データにU+FF5Eが渡されると0x8160に変換される。 
- 逆向きのJA16SJIS→Unicode方向への変換において、
JA16SJISの入力データに0x8160が渡されると、U+FF5EではなくU+301Cに変換される。 
この変換はあくまでもUnicodeからJA16SJIS方向への片方向の変換においてのみ適用される。
コードページ  †
- 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 と同義語。 
その他のエンコーディング  †
SGML文書  †
HTMLエンコーディング  †
文字参照(数値文字参照・文字実体参照)のエンコーディング(エスケープ)を行う。
- 表記方法により「数値文字参照」と「文字実体参照」の二種が存在する。
 
- 数値文字参照
10 or 16進数で該当文字をISO 10646の文字番号で指定する方法。
指定の文字コードで表現できない文字を表記、参照する。 
- 文字実体参照
特定のキーワード文字列で該当文字(主にマークアップで使われる文字)を指定する方法。
XSS(クロスサイト・スクリプティング)対策としても使用される。 
HTMLの文字エンコーディング  †
HTTPヘッダか、metaタグにエンコーディングを指定することで
WWWブラウザがデコードする際に指定する文字コード(コードページ)を指定する。
XMLの文字エンコーディング  †
ヘッダ部分の記述をDOMが理解して自動的にエンコード・デコードします。
<?xml version="1.0" encoding="Shift_JIS">
URLエンコーディング  †
- 概要
- URIにおいて使用できない文字を使う際に行われるエンコード(エスケープ)を行う。
 
- RFC3986のSection 2.1で定義されている。
 
 
- 利用シーン
- Query String経由でデータを受け渡す場合にも使用する。
 
 
Base64エンコーディング  †
- 利用シーン
- ByteデータをTextベースのプロトコル(SMTP,HTTP等)に乗せる場合に使用する。
 
 
各種フォーマット  †
Excelが開くことが可能なCSVファイル  †
CSVファイルを扱い際は、以下のことに気を付ける。
Excelにて文字化けやエラーが発生せず読み込めるCSVファイルは、
以下の2種類のエンコードのファイルである。
- BOM付きUTF-8
 
- 各言語(国)のANSIコード
 
各言語(国)の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コードで保存される。
参考  †
Tags: :.NET開発, :文字コード, :国際化対応