Open棟梁Project - マイクロソフト系技術情報 Wiki
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

[[戻る>文字コード]]
-[[戻る>文字コード]]

* 目次 [#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
文字化けに関するトラブルに強くなる【実践編】 (1-4) - @IT~
http://www.atmarkit.co.jp/ait/articles/0903/04/news115.html

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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS