#freeze
-[[文字化けについて:http://www.kent-web.com/pubc/jcode/]]
-[[文字化け(機種依存文字):http://www.geocities.co.jp/SiliconValley-SanJose/5148/moji/]]
-[[漢字コードと文字化け:http://www.kaiteki-net.com/nettrouble/mojibake/]]
-[[文字化け“???”の法則とその防止策:http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html]]

* 文字コード [#j818c14c]
-[[wikipedia - 文字コード:http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89]]
-[[IANA - CHARACTER SETS:http://www.iana.org/assignments/character-sets]]

|文字コード|文字集合|説明|h
|UTF-8|||
|EUC-JP|||
|EUC_JP_Solaris|JIS X 0201:1997, JIS X 0208:1997, NEC特殊文字(13区), NEC選定IBM拡張文字(89〜92区), IBM拡張文字(115〜119区)|J2SEで実装されている文字コードで、EUC-JPに。ちなみに、MySQLでは"eucjpms"という名前でver5.0.3から実装されている。|
|Shift_JIS|JIS X 0201:1997, JIS X 0208:1997||
|Windows-31J|JIS X 0201:1997, JIS X 0208:1997, NEC特殊文字(13区), NEC選定IBM拡張文字(89〜92区), IBM拡張文字(115〜119区)|WindowsのシフトJIS(Cp932)を扱う場合はこれを指定。でないと??とかが化ける。|
|MS932|同上|Javaで、「IBMのコードページ932」と「Windows-31J」を区別するための用語|

-Shift_JISには気をつけろ!
--[[wikipedia - Microsoftコードページ932:http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932]]

--Shift_JIS≒CP932=MS932=MS漢字コード=Windows-31J
--[[Shift_JISの意味を理解しよう:http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html#ap05]]
---IANAのShift_JISでは機種依存文字は対象外となっているため、WindowsのシフトJIS(Cp932)を扱う場合、Windows-31Jを使用するのが規格上は正しい

--Javaの場合
---「CP932」がIBMの「CP932」を指す
---「MS932」が「Windows-31J」を指す
---JDK 1.4.1以降では「MS932」の代わりに「Windows-31J」というキーワードでも「Windows-31J」文字セットを指定できるようになっている

- EUC-JP
--Javaでは "EUC_JP_Solaris" を使え!(EUC_JP_Solarisは機種依存文字をサポート)
--[[EUC_JP_Solarisの動作検証:http://d.hatena.ne.jp/mir/20050517/p3]]

** 各言語での文字コード [#a5cf06fd]
| 文字コード | Java | PHP |h
| UTF-8 | UTF-8 | UTF-8 |
| Shift_JIS | MS932 | SJIS-win |
| EUC-JP | EUC_JP_Solaris | eucJP-win |

* 文字化けを起こしやすい文字 [#m94af390]
-半角カナ
-機種依存文字

* 半角カナ [#g8892aec]
-[[半角カナ - Wikipedia:http://ja.wikipedia.org/wiki/%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A]]

* 5C問題 [#c77d7abd]
-2バイト目が5Cな以下の文字はよく文字化けを起こすので注意!
|―|ソ|Ы|?|噂|浬|欺|圭|構|蚕|十|申|曾|箪|貼|能|表|暴|予|禄|
|兔|喀|媾|彌|拿|杤|歃|濬|畚|秉|綵|臀|藹|觸|軆|鐔|饅|鷭|?|?|

-[[5C問題:http://www.kent-web.com/pubc/jcode/]]
-[[CGIで特定の文字(表・予・申・能など)が文字化けする:http://www.shtml.jp/mojibake/sjis_cgi.html]]
-[[PHP と Shift-JIS 環境での文字化けについて:http://www.syon.co.jp/syontech/tech003.html]]

* Tips [#j9e003c1]
-[[「美乳」で文字化けが直るって本当?:http://www.shtml.jp/mojibake/binew.html]]

* 各言語での注意点など [#v7c2fd42]
** Java [#x9ed0ba0]
-[[Javaの文字化け対策FAQ:http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html]]
-[[Java/文字化け:http://634.ayumu-baby.com/pukiwiki/index.php?Java%2F%CA%B8%BB%FA%B2%BD%A4%B1]]

** PHP [#b79a5986]
-[[マルチバイト文字列関数 (mbstring):http://www.phppro.jp/phpmanual/php/ref.mbstring.html]]

-単純に半角カナの有無を判別するならこれでもOK
 <?php
 $test_data[] = '日本語EUC';
 $test_data[] = '日本語EUC';
 $test_data[] = '日本語イーユーシー';
 $test_data[] = 'イーユーシー';
 $test_data[] = 'RX-78 ガンダム';
 $test_data[] = 'ギガ';
 
 foreach ($test_data as $key => $str) {
     $euc_len = strlen($str);
     $sjis_len = strlen(mb_convert_encoding($str, 'sjis', 'euc-jp'));
     if ($euc_len == $sjis_len) {
         echo "test data $key : 英数半角と全角漢字?n";
     } else if ($euc_len == ($sjis_len * 2)) {
         echo "test data $key : 半角カナのみ?n";
     } else {
         echo "test data $key : 半角カナを含む?n";
     }
 }
 ?>

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS