American Standard Code for Information Interchange
7bit 1byte code
ASCIIの国際化
http://ja.wikipedia.org/wiki/ISO/IEC_646
\と¥、~と‾
- EUC-JPはASCII拡張
- xUnix系
- Shift_JISはJIS X 0201拡張、JIS X 0201は、ISO/IEC 646の日本版
- Windows系
- utf8はASCII互換
- \は5C, ~は7E
- ¥はC2A5, ‾はE280BE
utf8 ¥nをShift_JISに変換すると5C 6Eになって\nとなる
EUCでもiconvでEUC-JPに変換すると…
iconv -f UTF-8 -t EUC-JP ascii/iconv-from-utf8.txt > ascii/iconv-to-euc.txt
CotEditorではEUC-JPだと¥を保存できない
Unicode変換プログラムがバックスラッシュや円記号をどう変換するかを知っておく必要がある
U+301C(WAVE DASH)とU+FF5E(FULLWIDTH TILDE)
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5
Windows OS において起きる問題
- 字形の問題。Windows XP以前のMS 明朝、MS ゴシック、MS UI GothicにおいてUnicodeの波ダッシュ (U+301C, WAVE DASH) が不適切形「Wave Dash2.svg」で表示される。一方、Unicodeの全角チルダ (U+FF5E, FULLWIDTH TILDE) は本来の“上がって下がる” 形「Wave Dash.svg」で表示される。
- 割り当ての問題。Shift_JISの波ダッシュ (0x8160、WAVE DASH)「Wave Dash.svg」をUnicodeの全角チルダと同一視する不適切な扱いをしている。したがって、波ダッシュ(波線)「Wave Dash.svg」を文字入力するのは容易ではなく、入力したつもりでも、不適切な全角チルダ「~」が入力されてしまう。
od -tx1z wave/utf32-be.txt
JIS X 0208:1997ではWAVE DASHが定義されており、これはU+301Cに該当する
Vista, XPでは波ダッシュ(JIS X 0213 1面1区33点)をFF5Eに変換する実装になっている
http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932
- WAVE DASH U+301C
- utf8→Shift_JIS可 8160
- utf8→CP932不可
- FULLWIDTH TILDE
- utf8→Shift_JIS不可
- utf8→CP932可 8160
$string =~ tr/\x{ff5e}\x{ff0d}/\x{301c}\x{2212}/;
- ~→〜
- -(FULLWIDTH HYPHEN MINUS)→−(MINUS SIGN)
http://www.klab.com/jp/company/media/mysql/index6.html http://blog.everqueue.com/chiba/2009/02/05/129/
- cp932使うしかない
- 海より深い理由でtableのdefault charsetはsjis
- dbh接続時の
set names
はdefault charsetと必ず揃えないと化ける set names sjis
でEncode::encode(‘cp932’, $string)
でinsert/updateset names sjis
でEncode::dencode(‘cp932’, $string)
でselectset charset
は使わない- WAVE DASHはFULLWIDTH TILDEに置換する
$string =~ tr/\x{301c}\x{2212}\x{2016}\x{2014}/\x{ff5e}\x{ff0d}\x{2225}\x{2015}/;
my.cnfでdefault-character-set=sjis 指定してね
実はdefault-character-setにはもう1つの作用があります。それは、クライアント自身が行う文字列処理です。 例えば、mysqlコマンドを対話的に使っているときのクォート(「'」や「"」)の処理や、libmysqlclientのmysql_real_escape_string(プリペアドステートメントのプレースホルダなどで使われます)がこれにあたります。 このおかげで、エスケープを指示する「¥」(0x5C)と同じコードを含むシフトJISの「表」(0x955C)などが問題なく処理できるわけです。
http://www.shtml.jp/mojibake/sjis_cgi.html
以下5C漢字
― ソ Ы Ⅸ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡
そのチェㇷ゚は𩸽
Basic Multilingual Plane
uc2 and utf8mb4