Home > 文字コード Archive
文字コード Archive
CP932 と Shift_JIS について / 文字コード
- 2009-06-08 (月)
- 文字コード
CP932
Windowsにおける文字コード。一般的には「shift_jis」だが、正しくは「CP932」である。
(MS932とも言う)
CP932はshift_jisを拡張したもの。
(基本的には文字コードとしての違いはない)
が、他の文字コードへ変換する場合に違いが出る。
(一部の文字が異なる整数値へと変換される > 文字化けの原因となる)
例:〜 をshift_jisとしてUnicode変換すると 0×301C 、CP932としてUnicode変換すると 0xFF5E (Eclipse上でたまに遭遇してたのはこれだった)
また、一部の文字はCP932には存在するがshift_jisには存在しない。
IANAでの登録名は「Windows-31J」。
ということで、プログラム内とかではshift_jisじゃなくてCP932(MS932)を使ったほうがいいらしい。
- Comments: 0
- Trackbacks: 0
モバイルサイト制作における文字コードの扱いについて
参照記事:携帯サイトの文字コードに気をつける
Shift_JIS
基本的に日本でモバイルサイトを制作する際には、文字コードはShift_JISを利用する。
出力文字コードはSJIS-win
モバイルサイトで絵文字を扱うには、各キャリアの絵文字が設定されている「外字領域」を含んだ文字エンコードを利用する必要がある。
PHPの場合では、それは「SJIS-win」になる。SJIS-winはShift_JISに比べて扱える文字種が増えていて、キャリアごとの絵文字領域もカヴァーしている。そのため、PHPでモバイルサイトを作成する場合にはShift_JISではなく、SJIS-winを使用する。
内部文字コードはeucJP-win
内部文字コードにEUC-JPを利用している場合(ソースファイル、プログラムファイルをEUC-JPで作成している場合)は「eucJP-win」を利用する。(これも出力文字コード同様、絵文字領域をカヴァーするため)
* php.ini の「mbstring.internal_encoding」項目において、内部文字エンコードに「eucJP-win」を指定してやる。
UTF-8
UTF-8の場合は、これは絵文字領域もカヴァーしているらしいので、とくに意識する必要はないらしい。
(内部文字コードはUTF-8を指定して、ソースファイルの文字コードもUTF-8使って、んで出力の場面でのみ mb_internal_encoding を使って出力文字コードに SJIS-win してやればいいってこと?試してないけど)
例外(SoftBankの3GC型)
SoftBankの3GC型端末では、文字コードを SJIS-win ではなく、UTF-8 で出力しないと不具合が起こるらしい。なので、通常の携帯端末へは SJIS-win で出力、SoftBankの3GC型端末のみ UTF-8 で出力という出し分けを行う必要がある、らしい。
PEARのNet_UserAgent_Mobileを使った場合の処理例
<?php // Net_UserAgent_Mobile require_once('Net/UserAgent/Mobile.php'); // Net_UserAgent_Mobileをインスタンス化 $agent = Net_UserAgent_Mobile::singleton(); // 出力する文字コードを変換 // SoftBankの3GC型端末はUTF-8に、それ以外はSJIS-winに変換 if ($agent->isSoftBank() && $agent-> isType3GC()) { mb_convert_variables(mb_internal_encoding(), 'UTF-8', $_POST); mb_convert_variables(mb_internal_encoding(), 'UTF-8', $_GET); } else { mb_convert_variables(mb_internal_encoding(), 'SJIS-win', $_POST); mb_convert_variables(mb_internal_encoding(), 'SJIS-win', $_GET); } ?>
- Comments: 0
- Trackbacks: 0
MySQLのDB文字コードを変更する
Ubuntu Server にインストールした
mysql データベースの文字コードを utf-8 に変更する。
デフォルトだと latin1 になっている。以下のように。
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
mysql の設定ファイル my.cnf は
/etc/mysql/ にあるので、このファイルに以下のように記述を追加。
(utf-8などと、ハイフンを入れないように注意)
[client] のブロックに
default-character-set=utf8
[mysqld] のブロックに
default-character-set=utf8
skip-character-set-client-handshake
を追記。
[mysql.server]
user=mysql
default-character-set=utf8
を適当な場所に追加。
[mysqld_safe] のブロックに
default-character-set=utf8
を追記。
[mysql] のブロックに
default-character-set=utf8
を追記。
[mysqldump] のブロックに
default-character-set=utf8
を追記。
[mysqld] ブロックの
language = /usr/share/mysql/english
の english を japanese に変更。
設定ファイルの設定を有効にするために、MySQL を再起動させる。
MySQL の開始、再起動、停止
$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/mysql restart
$ sudo /etc/init.d/mysql stop
確認してみると
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
全部 utf-8 になった(・∀・)イイ
ちなみに、character_set_filesystem の部分は binary で問題ないらしい。
(ファイルシステムのための文字コードなので)
- Comments: 0
- Trackbacks: 0
モバイルサイト制作における文字コードの扱い
モバイルサイト制作における文字コードの扱いについて
復習の上、簡単にまとめなおしたので、それをメモ。
参照URL: 携帯サイトの文字コードに気をつける
Shift_JIS
基本的に日本でモバイルサイトを制作する際には、文字コードはShift_JISを利用する。
出力文字コードは「SJIS-win」
モバイルサイトで絵文字を扱うには、各キャリアの絵文字が設定されている「外字領域」を含んだ文字エンコードを利用する必要がある。
PHPの場合では、それは「SJIS-win」になる。SJIS-winはShift_JISに比べて扱える文字種が増えていて、キャリアごとの絵文字領域もカヴァーしている。そのため、PHPでモバイルサイトを作成する場合にはShift_JISではなく、SJIS-winを使用する。
内部文字コードは「eucJP-win」
内部文字コードにEUC-JPを利用している場合(ソースファイル、プログラムファイルをEUC-JPで作成している場合)は「eucJP-win」を利用する。(これも出力文字コード同様、絵文字領域をカヴァーするため)
php.iniの「mbstring.internal_encoding」項目において、内部文字エンコードに「eucJP-win」を指定してやる。
UTF-8
UTF-8の場合は、これは絵文字領域もカヴァーしているらしいので、とくに意識する必要はないらしい。
(内部文字コードはUTF-8を指定して、ソースファイルの文字コードもUTF-8使って、んで出力の場面でのみ mb_internal_encoding を使って出力文字コードに SJIS-win してやればいいってこと?試してないけど)
例外(SoftBankの3GC型)
SoftBankの3GC型端末では、文字コードを SJIS-win ではなく、UTF-8 で出力しないと不具合が起こるらしい。なので、通常の携帯端末へは SJIS-win で出力、SoftBankの3GC型端末のみ UTF-8 で出力という出し分けを行う必要がある、らしい。
PEARのNet_UserAgent_Mobileを使った場合の処理例
<?php // Net_UserAgent_Mobile require_once('Net/UserAgent/Mobile.php'); // Net_UserAgent_Mobileをインスタンス化 $agent = Net_UserAgent_Mobile::singleton(); // 出力する文字コードを変換 // SoftBankの3GC型端末はUTF-8に、それ以外はSJIS-winに変換 if ($agent->isSoftBank() && $agent-> isType3GC()) { mb_convert_variables(mb_internal_encoding(), 'UTF-8', $_POST); mb_convert_variables(mb_internal_encoding(), 'UTF-8', $_GET); } else { mb_convert_variables(mb_internal_encoding(), 'SJIS-win', $_POST); mb_convert_variables(mb_internal_encoding(), 'SJIS-win', $_GET); } ?>
- Comments: 0
- Trackbacks: 0
Home > 文字コード Archive