マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • エンコーディングとは【encoding】(エンコード) - 意味-解説-説明-定義 : IT用語辞典
    http://e-words.jp/w/E382A8E383B3E382B3E383BCE38387E382A3E383B3E382B0.html
    • 情報を一定の規則に従ってデータに置き換えて記録すること。
    • ある形式のデータを一定の規則に基づいて別の形式のデータに変換すること。
    • (文字エンコーディングだけでなく、)データ圧縮や暗号化などもこれに含まれる。

余談:・・・となると、

StreamにDecorateパターンを適用する
殆どの処理が=エンコーディングと言う事になる。

文字エンコーディング

ココでは各種、文字エンコーディングの情報を纏めています。
「外字」については、「Windowsの外字」を参照下さい。

文字エンコーディングとは、文字列データを、
異なる文字コード(コードページ)を使用したバイト表現に変換することである。

文字化け

文字化けは、一般的に、

  • エンコーダに適切な文字コード(コードページ)を指定していない
  • プラットフォームやユーザ間で使用している外字が異なる
  • コードページによっては、変換が不可逆なケースがある

際に発生します。

文字コード(コードページ)指定を大きく誤っている場合は、すぐ気が付くのですが、

  • UTF-16(Unicode)
  • UTF-8
  • Shift JIS
  • EUC-JP

一部だけ文字化けする場合のトラブルシュートは苦戦することが多いです。
一部だけ文字化けするパターンは以下の様に分類できると考えます。

  • 文字コード(コードページ)指定を大きく間違えていない(微妙に間違っている)
    • 例えば、Shift_JISの亜種のコードページ指定を誤っている。
      • ISO-2022-JP
      • Microsoftコードページ932(CP932)
      • MacJapanese?
  • 外字領域の定義(見た目)が異なっている。
    • この場合、データのエンコード自体は正しく行われている。
    • 人間にとっての見た目が、異なっているため文字化けと感じられる。
    • 外字についてはこちらを参照:「Windowsの外字

ポイント

従って、以下に注意を払う必要があります。

  • プラットフォーム
    • 実装されている文字コード(コードページやフォント)
    • 適用される標準のエンコーディングが何か?
    • フォントや外字がインストールされているか?
  • エンコーディングが動作する箇所
  • ファイルI/O
  • SGML文書のI/O
    • HTML出力
    • XML入出力
  • ファイル転送(プロトコルに実装されているケース)
    • 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方向への片方向の変換においてのみ適用される。

コードページ

  • 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 と同義語。

その他のエンコーディング

SGML文書

HTMLエンコーディング

文字参照(数値文字参照・文字実体参照)のエンコーディング(エスケープ)を行う。

  • 文字参照 - 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の文字エンコーディング

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の文字エンコーディング

ヘッダ部分の記述をDOMが理解して自動的にエンコード・デコードします。

<?xml version="1.0" encoding="Shift_JIS">

URLエンコーディング

  • 概要
    • URIにおいて使用できない文字を使う際に行われるエンコード(エスケープ)を行う。
    • RFC3986のSection 2.1で定義されている。
  • 利用シーン
    • Query String経由でデータを受け渡す場合にも使用する。

Base64エンコーディング

  • 概要
    • Byteデータと文字列の相互変換を行う。
  • 利用シーン
    • ByteデータをTextベースのプロトコル(SMTP,HTTP等)に乗せる場合に使用する。

各種フォーマット

Excelが開くことが可能なCSVファイル

CSVファイルを扱い際は、以下のことに気を付ける。

Excelにて文字化けやエラーが発生せず読み込めるCSVファイルは、

以下の2種類のエンコードのファイルである。

  • BOM付きUTF-8
  • 各言語(国)のANSIコード
各言語(国)のANSIコード(一例)
#言語文字セット名codepage
1日本語Shift-JIS932
2英語(米国)Windows-12521252
3英語(英国)Windows-12521252
4フランス語(フランス)Windows-12521252
5スペイン語(スペイン)Windows-12521252
6繁体字中国語big5950
7簡体字中国語gb2312936
8韓国語ks_c_5601-1987949

Excel上でCSV形式で保存すると、ANSIコードで保存される。

参考


Tags: :.NET開発, :国際化対応, :文字コード


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-27 (月) 11:09:14 (907d)