SlideShare a Scribd company logo
1 of 79
Download to read offline
文字化け Powered by Rabbit 2.1.6
文字化け
とみたまさひろ
bitの会
2015-06-06
文字化け Powered by Rabbit 2.1.6
自己紹介
とみた まさひろ
長野県北部在住プログラマー
言語: C(1989〜) Ruby(1998〜)
日本MySQLユーザ会代表
長野ソフトウェア技術者グループ(NSEG)
文字化け Powered by Rabbit 2.1.6
自己紹介
http://tmtms.hatenablog.com
http://twitter.com/tmtms
https://github.com/tmtm
MySQL 3.21 の日本語対応 (1998 )
MySQLのRubyバインディング作成 (1998 )
文字化け Powered by Rabbit 2.1.6
執筆書籍
文字化け Powered by Rabbit 2.1.6
自己紹介
もっともRTされたツイート
文字化け Powered by Rabbit 2.1.6
自己紹介
もっともブクマされたブログ
文字化け Powered by Rabbit 2.1.6
宣伝その1 NSEG
http://nseg.jp
長野のIT技術者のゆるい集まり
2010年2月発足
(発起人:おびなたさん、しむやさん、おかもとさん)
毎月勉強会開催(今までに63回)主に長野市
「理論から学ぶデータベース実践入門」読書
会(隔週水曜日) at ギークラボ長野
文字化け Powered by Rabbit 2.1.6
宣伝その2 ギークラボ長野
http://geeklab-nagano.com
県庁近く
無料で利用できる作業スペース
電源 & WiFi & Pepperくん あり
6/13 ハンズオン「はじめての Unity 〜2D
ゲームを作ってみよう〜」
文字化け Powered by Rabbit 2.1.6
文字化け
文字化け Powered by Rabbit 2.1.6
文字化けに関するトラブルシューティング
http://www.geocities.co.jp/Playtown/7711/gallaly/trableshooting.html
文字化け Powered by Rabbit 2.1.6
文字化けを直してみた
残念ながら現バージョンのWindowsでは
文字化けをなおすことは出来ません。
2025年発売予定のWindowsでは対応します。
このトラブルシューティングでは、
このような問題の原因を突き止め、
問題を解決する手順を示します。
質問の答えをクリックしてください。
手順に従って進みながら問題を解決できます。
どうしますか?
□ 仕方がないから「ダイアログで遊ぼう」を閲覧。
□ 「渡部シンイチのDejavu WORLD」を閲覧。
文字化け Powered by Rabbit 2.1.6
文字化けの原因
1. 文字コードが正しくない
文字化け Powered by Rabbit 2.1.6
文字コード
Charset, 文字集合
エンコーディング方式
シフトJIS, 日本語EUC, UTF-8 等
文字のバイト表現
文字化け Powered by Rabbit 2.1.6
日本語の文字コード
UTF-8 (Unicode 今は普通はこれ)
SHIFT_JIS (Windows)
EUC-JP (昔の UNIX)
ISO-2022-JP (メール)
文字化け Powered by Rabbit 2.1.6
同じ文字でも異なるコード
「あ」
UTF-8 (E3 81 82)
EUC-JP (A4 A2)
SHIFT_JIS (82 A0)
文字化け Powered by Rabbit 2.1.6
同じバイト列でも別の文字
C2 A9
UTF-8 「©」
EUC-JP 「息」
SHIFT_JIS 「ツゥ」
文字化け Powered by Rabbit 2.1.6
バイト列だけでは
文字コードはわからない
文字化け Powered by Rabbit 2.1.6
ところで
日本語文字のことを「2バイト文字」と言ってま
せんか?
UTF-8は日本語はだいたい3バイト
「あ」(E3 81 82)
「ア」(EF BD B1)
文字化け Powered by Rabbit 2.1.6
文字化けした文字列の
元の文字コードの見分け方
文字化け Powered by Rabbit 2.1.6
慣れるとパッと見でわかる
文字化け Powered by Rabbit 2.1.6
EUC-JP を SHIFT_JIS として表示
半角カナが多い
日本語にほんごニホンゴ
ニ?ワク?ヒ、ロ、?エ・ヒ・ロ・?エ
文字化け Powered by Rabbit 2.1.6
UTF-8 を SHIFT_JIS として表示
画数の多い漢字の中に半角カナが少々混じってる
日本語にほんごニホンゴ
譌・譛ャ隱槭↓縺サ繧薙#繝九?繝ウ繧エ
文字化け Powered by Rabbit 2.1.6
ISO-2022-JP の ESC 落ち
ASCII文字だけで構成されて「$B」「(B」がある
日本語にほんごニホンゴ
?$BF|K8l$K$[$s$4%K%[%s%4?(B
文字化け Powered by Rabbit 2.1.6
文字化けの原因
2. 文字コードが不明
文字化け Powered by Rabbit 2.1.6
自動判定もできるけど
完全じゃない
文字化け Powered by Rabbit 2.1.6
同じバイト列でも別の文字(再掲)
C2 A9
UTF-8 「©」
EUC-JP 「息」
SHIFT_JIS 「ツゥ」
文字化け Powered by Rabbit 2.1.6
自動判定
バイト列が文字コードの正当な範囲にあるか
どうかで判定
文字列が短いと難しい
文字列が長ければ精度は上がる
へんなバイトが混在してたらアウト
日本語じゃないのに日本語と誤判定したり
文字化け Powered by Rabbit 2.1.6
EUC - Extended Unix Code
EUC-JP : 日本語EUC
EUC-KR : 韓国語EUC
EUC-CN : 簡体字中国語EUC
文字コードの範囲は同じだけど文字が違う
BB FA : 字(JP) / 샙(KR) / 机(CN)
文字化け Powered by Rabbit 2.1.6
文字境界
EUC
1バイト文字 (00-7F) ← ASCII
2バイト文字 (A1-F4 | A1-FE)
文字列の先頭から見ないとわからない
SHIFT_JIS
1バイト文字 (00-7F A1-DF) ← JISX0201
2バイト文字 (81-9F E0-FC | 40-7E 80-FC)
2バイト目に ASCII 範囲含んでてやばい
文字化け Powered by Rabbit 2.1.6
文字境界
UTF-8
1バイト文字 (00-7F) ← ASCII
2バイト文字 (C2-DF | 80-BF)
3バイト文字 (E0-EF | 80-BF | 80-BF)
4バイト文字 (F0-F7 | 80-BF | 80-BF | 80-BF)
文字境界判別しやすい
文字化け Powered by Rabbit 2.1.6
文字化けの原因
3. 機種依存文字
文字化け Powered by Rabbit 2.1.6
ISO-2022-JP
いわゆる「JISコード」
日本語メールで使われる文字コードは未だ
に ISO-2022-JP が主流
 と ¥ を使い分けできる
ISO-2022-JP に無い文字
① ② ③ Ⅰ Ⅱ Ⅲ ㈱ ㎏ ㎝ 髙 﨑 カタカナ
文字化け Powered by Rabbit 2.1.6
ISO-2022-JP に無い文字を
ISO-2022-JP と偽ってメールする
奴がいる
文字化け Powered by Rabbit 2.1.6
文字化け
文字化け Powered by Rabbit 2.1.6
昔の Mac だと ① が ㈪ に見えたり
文字化け Powered by Rabbit 2.1.6
だいたいマイクロソフトが悪い
文字化け Powered by Rabbit 2.1.6
MS の ISO-2022-JP
CP50221
ISO-2022-JP に無い文字を含む
① ② ③ Ⅰ Ⅱ Ⅲ ㈱ ㎏ ㎝ 髙 﨑 カタカナ
 と ¥ の区別がつかない
文字化け Powered by Rabbit 2.1.6
まともなメールアプリが
「ISO-2022-JP」を信じると文字
化け
文字化け Powered by Rabbit 2.1.6
まともなメールアプリが責められる
「Outlookだと見えるのに」
文字化け Powered by Rabbit 2.1.6
ISO-2022-JP は CP50221 と
みなして表示
文字化け Powered by Rabbit 2.1.6
ISO-2022-JP を ISO-2022-JP
として扱うアプリが絶滅
文字化け Powered by Rabbit 2.1.6
文字コードの置き換え
ISO-2022-JP : CP50221
EUC-JP : CP51932
SHIFT_JIS : CP932
文字化け Powered by Rabbit 2.1.6
だいたいマイクロソフトが悪い
文字化け Powered by Rabbit 2.1.6
文字化けの原因
4. フォントが無い
文字化け Powered by Rabbit 2.1.6
🍣 🍺 🍮 🍢 🍜 🍶
文字化け Powered by Rabbit 2.1.6
□ □ □ □ □ □
文字化け Powered by Rabbit 2.1.6
対応フォント入れれば解決
文字化け Powered by Rabbit 2.1.6
発表の途中ですがお知らせです
文字化け Powered by Rabbit 2.1.6
FAQ: 下のウサギとカメは何?
文字化け Powered by Rabbit 2.1.6
Rabbit
Ruby製プレゼンツール
http://rabbit-shocker.org/
ウサギとカメはタイムキーパー
カメに追い抜かされなければ時間内
プレゼンがつまらなくても和む
ソースはテキスト(RD / Markdown)
PDF ビューアとしても利用可
文字化け Powered by Rabbit 2.1.6
Ruby
文字化け Powered by Rabbit 2.1.6
Ruby
プログラミング言語
オブジェクト指向スクリプト言語
オブジェクト毎に異なる文字コードが可能
ファイル毎に異なる文字コードが可能
嫌な予感…
文字化け Powered by Rabbit 2.1.6
ファイル
同じファイルからの読み込みでも異なる文字コード
になることも
f = File.open("何か.txt", "r:utf-8")
f.gets #=> 1行文字列 UTF-8
f.read(10) #=> 10バイトデータ ASCII-8BIT
文字化け Powered by Rabbit 2.1.6
異なる文字コード同士
utf8 = "ほげ"
sjis = "ほげ".encode("cp932")
utf8 == sjis #=> 偽
utf8 + sjis #=> エラー
utf8 =~ /#{sjis}/ #=> エラー
utf8 = "ASCII"
sjis = "ASCII".encode("cp932")
utf8 == sjis #=> 真
文字化け Powered by Rabbit 2.1.6
混ぜるな危険!
文字化け Powered by Rabbit 2.1.6
全部 UTF-8 に統一すれば安全
文字化け Powered by Rabbit 2.1.6
MySQL
文字化け Powered by Rabbit 2.1.6
オープンソースの RDBMS
文字化け Powered by Rabbit 2.1.6
文字コード
クライアントライブラリ
クライアント-サーバー接続
データベース
テーブル
カラム
…毎に設定可能
文字化け Powered by Rabbit 2.1.6
嫌な予感…
文字化け Powered by Rabbit 2.1.6
utf8 と utf8mb4
UTF-8 文字コード
utf8 は 3バイトまで
utf8mb4 は 4バイトまで
絵文字(🍣や🍺)は4バイト
文字化け Powered by Rabbit 2.1.6
utf8カラムに4バイト文字を入れようとすると
接続が utf8 の場合:
mysql> insert into t (c) values ('今日は🍣と🍺');
Query OK, 1 row affected, 1 warning (0.09 sec)
mysql> select * from t;
+-----------+
| c |
+-----------+
| 今日は |
+-----------+
文字化け Powered by Rabbit 2.1.6
utf8カラムに4バイト文字を入れようとすると
接続が utf8mb4 の場合:
mysql> insert into t (c) values ('今日は🍣と🍺');
Query OK, 1 row affected, 1 warning (0.09 sec)
mysql> select * from t;
+----------------+
| c |
+----------------+
| 今日は?と? |
+----------------+
文字化け Powered by Rabbit 2.1.6
utf8mb4カラムに4バイト文字を入れようとすると
接続が utf8mb4 の場合:
mysql> insert into t (c) values ('今日は🍣と🍺');
Query OK, 1 row affected (0.06 sec)
mysql> select * from t;
+----------------------+
| c |
+----------------------+
| 今日は🍣と🍺 |
+----------------------+
文字化け Powered by Rabbit 2.1.6
utf8mb4カラムに4バイト文字を入れようとすると
接続が utf8 の場合:
mysql> insert into t (c) values ('今日は🍣と🍺');
Query OK, 1 row affected, 1 warning (0.06 sec)
mysql> select * from t;
+--------------------+
| c |
+--------------------+
| 今日は????と?? |
+--------------------+
文字化け Powered by Rabbit 2.1.6
4バイト文字を utf8 接続から取り出すと
mysql> select * from t;
+----------------+
| c |
+----------------+
| 今日は?と? |
+----------------+
文字化け Powered by Rabbit 2.1.6
「?」の調査
mysql> select hex(c) from t;
+------------------------------------------+
| hex(c) |
+------------------------------------------+
| E4BB8AE697A5E381AFF09F8DA3E381A8F09F8DBA | ←ちゃんと入ってる
| E4BB8AE697A5E381AF3F3F3F3FE381A83F3F | ←データが「?」
+------------------------------------------+
文字化け Powered by Rabbit 2.1.6
混ぜるな危険!
文字化け Powered by Rabbit 2.1.6
全部 utf8 / utf8mb4 に統一すれ
ば安全
文字化け Powered by Rabbit 2.1.6
まとめ
文字化け Powered by Rabbit 2.1.6
歴史的経緯により日本語には複数
の文字コードが使用されている
文字化け Powered by Rabbit 2.1.6
これからは UTF-8 を使えばみんな
ハッピー
文字化け Powered by Rabbit 2.1.6
本当に?
文字化け Powered by Rabbit 2.1.6
Unicode の闇
文字化け Powered by Rabbit 2.1.6
中国語と日本語で文字が統一
文字化け Powered by Rabbit 2.1.6
合成文字
が (E3 81 8C)
が (E3 81 8B E3 82 99)
「か」 +「゙」の二文字
比較には正規化が必要
文字化け Powered by Rabbit 2.1.6
色付き絵文字の肌色問題
絵文字は日本発祥
肌色が一種類
「人種差別だ!」
合成文字で解決
これからの絵文字の実装指針、UTR #51“Unicode Emoji”とはなにか -INTERNET Watch
http://internet.watch.impress.co.jp/docs/special/20150131_686161.html
文字化け Powered by Rabbit 2.1.6
俺達の戦いはこれからだ!
文字化け Powered by Rabbit 2.1.6
おわり

More Related Content

What's hot

raspi + soracom #pakeana33
raspi + soracom #pakeana33raspi + soracom #pakeana33
raspi + soracom #pakeana33@ otsuka752
 
最新ゲームを支える文言
最新ゲームを支える文言最新ゲームを支える文言
最新ゲームを支える文言miki koganei
 
ジョークRFC紹介
ジョークRFC紹介ジョークRFC紹介
ジョークRFC紹介miki koganei
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
RDS for PostgreSQLにまつわる雑多な話
RDS for PostgreSQLにまつわる雑多な話RDS for PostgreSQLにまつわる雑多な話
RDS for PostgreSQLにまつわる雑多な話Satoshi Hirata
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Kazuo Asano (@kazuo_asa)
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解するKenji Urushima
 
Bird in show_net
Bird in show_netBird in show_net
Bird in show_netTomoya Hibi
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
NAT配下からIPv6でアクセスするEzoScapeはTeredo通信だった
NAT配下からIPv6でアクセスするEzoScapeはTeredo通信だったNAT配下からIPv6でアクセスするEzoScapeはTeredo通信だった
NAT配下からIPv6でアクセスするEzoScapeはTeredo通信だったShinichi Hirauchi
 
BMP活用による SDN時代のオーバレイNW監視手法の提案
BMP活用による SDN時代のオーバレイNW監視手法の提案BMP活用による SDN時代のオーバレイNW監視手法の提案
BMP活用による SDN時代のオーバレイNW監視手法の提案Toshiki Tsuboi
 
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halfCvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halftomoaki0705
 
BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料Toshiki Tsuboi
 
すごいログ解析の話
すごいログ解析の話すごいログ解析の話
すごいログ解析の話Satoshi Hirata
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用Toshiki Tsuboi
 
Trema day 1
Trema day 1Trema day 1
Trema day 1ykuga
 
あるブートローダの話
あるブートローダの話あるブートローダの話
あるブートローダの話nullnilaki
 

What's hot (20)

Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
raspi + soracom #pakeana33
raspi + soracom #pakeana33raspi + soracom #pakeana33
raspi + soracom #pakeana33
 
最新ゲームを支える文言
最新ゲームを支える文言最新ゲームを支える文言
最新ゲームを支える文言
 
ジョークRFC紹介
ジョークRFC紹介ジョークRFC紹介
ジョークRFC紹介
 
Nseg49 mysql
Nseg49 mysqlNseg49 mysql
Nseg49 mysql
 
ASAMAP 開発秘話
ASAMAP 開発秘話ASAMAP 開発秘話
ASAMAP 開発秘話
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
RDS for PostgreSQLにまつわる雑多な話
RDS for PostgreSQLにまつわる雑多な話RDS for PostgreSQLにまつわる雑多な話
RDS for PostgreSQLにまつわる雑多な話
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解する
 
Bird in show_net
Bird in show_netBird in show_net
Bird in show_net
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
NAT配下からIPv6でアクセスするEzoScapeはTeredo通信だった
NAT配下からIPv6でアクセスするEzoScapeはTeredo通信だったNAT配下からIPv6でアクセスするEzoScapeはTeredo通信だった
NAT配下からIPv6でアクセスするEzoScapeはTeredo通信だった
 
BMP活用による SDN時代のオーバレイNW監視手法の提案
BMP活用による SDN時代のオーバレイNW監視手法の提案BMP活用による SDN時代のオーバレイNW監視手法の提案
BMP活用による SDN時代のオーバレイNW監視手法の提案
 
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halfCvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
 
BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料BGP/MPLS-VPNのお勉強資料
BGP/MPLS-VPNのお勉強資料
 
すごいログ解析の話
すごいログ解析の話すごいログ解析の話
すごいログ解析の話
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
 
あるブートローダの話
あるブートローダの話あるブートローダの話
あるブートローダの話
 

Viewers also liked

ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)UEHARA, Tetsutaro
 
Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかGit hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかKakigi Katuyuki
 
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みToshiharu Sugiyama
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情Masahiro Tomita
 
子供とネットを考える会の合言葉
子供とネットを考える会の合言葉子供とネットを考える会の合言葉
子供とネットを考える会の合言葉はなずきん Hana
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
「子供がハッカーに興味をもった時に備えて」考える会オープニング
「子供がハッカーに興味をもった時に備えて」考える会オープニング「子供がハッカーに興味をもった時に備えて」考える会オープニング
「子供がハッカーに興味をもった時に備えて」考える会オープニングはなずきん Hana
 
インターネットで気をつける12のこと
インターネットで気をつける12のことインターネットで気をつける12のこと
インターネットで気をつける12のことNAGATA Chihiro
 
見ててつらぽよなスライドVer1.2
見ててつらぽよなスライドVer1.2見ててつらぽよなスライドVer1.2
見ててつらぽよなスライドVer1.2From Atom
 
派遣社員が現場にRubyを取り入れるまで
派遣社員が現場にRubyを取り入れるまで派遣社員が現場にRubyを取り入れるまで
派遣社員が現場にRubyを取り入れるまでhayabusa333
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_ircrarere
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416Yoshihiro Sasaki
 
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うYAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うmoznion
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」technocat
 
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」technocat
 
理解したつもりになるGit入門
理解したつもりになるGit入門理解したつもりになるGit入門
理解したつもりになるGit入門Yoshihiro Sasaki
 

Viewers also liked (20)

ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)
 
Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかGit hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうか
 
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
子供とネットを考える会の合言葉
子供とネットを考える会の合言葉子供とネットを考える会の合言葉
子供とネットを考える会の合言葉
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
「子供がハッカーに興味をもった時に備えて」考える会オープニング
「子供がハッカーに興味をもった時に備えて」考える会オープニング「子供がハッカーに興味をもった時に備えて」考える会オープニング
「子供がハッカーに興味をもった時に備えて」考える会オープニング
 
インターネットで気をつける12のこと
インターネットで気をつける12のことインターネットで気をつける12のこと
インターネットで気をつける12のこと
 
見ててつらぽよなスライドVer1.2
見ててつらぽよなスライドVer1.2見ててつらぽよなスライドVer1.2
見ててつらぽよなスライドVer1.2
 
派遣社員が現場にRubyを取り入れるまで
派遣社員が現場にRubyを取り入れるまで派遣社員が現場にRubyを取り入れるまで
派遣社員が現場にRubyを取り入れるまで
 
Currying in perl
Currying in perlCurrying in perl
Currying in perl
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_irc
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416
 
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うYAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」
 
理解したつもりになるGit入門
理解したつもりになるGit入門理解したつもりになるGit入門
理解したつもりになるGit入門
 
Use Carton
Use CartonUse Carton
Use Carton
 
Asset Pipeline for Perl
Asset Pipeline for PerlAsset Pipeline for Perl
Asset Pipeline for Perl
 
YAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pmYAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pm
 

Similar to 文字化け

本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合Ryusuke Kajiyama
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Takehiro Kudou
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 VirtualTech Japan Inc.
 
MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索yoyamasaki
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用Ruo Ando
 
Packet と向き合う夏 VRRP Advertisement編
Packet と向き合う夏 VRRP Advertisement編Packet と向き合う夏 VRRP Advertisement編
Packet と向き合う夏 VRRP Advertisement編@ otsuka752
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16tomoaki0705
 
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話Preferred Networks
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Tomoya Hibi
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書くmametter
 
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Hirofumi Iwasaki
 
nadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティスnadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティスKazuhiro Nishiyama
 

Similar to 文字化け (20)

本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門
 
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
 
Packet と向き合う夏 VRRP Advertisement編
Packet と向き合う夏 VRRP Advertisement編Packet と向き合う夏 VRRP Advertisement編
Packet と向き合う夏 VRRP Advertisement編
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
 
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
文字コード略歴
文字コード略歴文字コード略歴
文字コード略歴
 
文字コード略歴
文字コード略歴文字コード略歴
文字コード略歴
 
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
nadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティスnadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティス
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 

More from Masahiro Tomita

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろMasahiro Tomita
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコルMasahiro Tomita
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわいMasahiro Tomita
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版Masahiro Tomita
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版Masahiro Tomita
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャルMasahiro Tomita
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトMasahiro Tomita
 
MySQLのプロトコル解説
MySQLのプロトコル解説MySQLのプロトコル解説
MySQLのプロトコル解説Masahiro Tomita
 
Dockerイメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作るMasahiro Tomita
 

More from Masahiro Tomita (20)

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろ
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
 
CSV
CSVCSV
CSV
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 
Ruby24
Ruby24Ruby24
Ruby24
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
MySQLを拡張する
MySQLを拡張するMySQLを拡張する
MySQLを拡張する
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
 
Crystal
CrystalCrystal
Crystal
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
Sequelのすすめ
SequelのすすめSequelのすすめ
Sequelのすすめ
 
MySQLのプロトコル解説
MySQLのプロトコル解説MySQLのプロトコル解説
MySQLのプロトコル解説
 
Dockerイメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作る
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

文字化け

  • 1. 文字化け Powered by Rabbit 2.1.6 文字化け とみたまさひろ bitの会 2015-06-06
  • 2. 文字化け Powered by Rabbit 2.1.6 自己紹介 とみた まさひろ 長野県北部在住プログラマー 言語: C(1989〜) Ruby(1998〜) 日本MySQLユーザ会代表 長野ソフトウェア技術者グループ(NSEG)
  • 3. 文字化け Powered by Rabbit 2.1.6 自己紹介 http://tmtms.hatenablog.com http://twitter.com/tmtms https://github.com/tmtm MySQL 3.21 の日本語対応 (1998 ) MySQLのRubyバインディング作成 (1998 )
  • 4. 文字化け Powered by Rabbit 2.1.6 執筆書籍
  • 5. 文字化け Powered by Rabbit 2.1.6 自己紹介 もっともRTされたツイート
  • 6. 文字化け Powered by Rabbit 2.1.6 自己紹介 もっともブクマされたブログ
  • 7. 文字化け Powered by Rabbit 2.1.6 宣伝その1 NSEG http://nseg.jp 長野のIT技術者のゆるい集まり 2010年2月発足 (発起人:おびなたさん、しむやさん、おかもとさん) 毎月勉強会開催(今までに63回)主に長野市 「理論から学ぶデータベース実践入門」読書 会(隔週水曜日) at ギークラボ長野
  • 8. 文字化け Powered by Rabbit 2.1.6 宣伝その2 ギークラボ長野 http://geeklab-nagano.com 県庁近く 無料で利用できる作業スペース 電源 & WiFi & Pepperくん あり 6/13 ハンズオン「はじめての Unity 〜2D ゲームを作ってみよう〜」
  • 9. 文字化け Powered by Rabbit 2.1.6 文字化け
  • 10. 文字化け Powered by Rabbit 2.1.6 文字化けに関するトラブルシューティング http://www.geocities.co.jp/Playtown/7711/gallaly/trableshooting.html
  • 11. 文字化け Powered by Rabbit 2.1.6 文字化けを直してみた 残念ながら現バージョンのWindowsでは 文字化けをなおすことは出来ません。 2025年発売予定のWindowsでは対応します。 このトラブルシューティングでは、 このような問題の原因を突き止め、 問題を解決する手順を示します。 質問の答えをクリックしてください。 手順に従って進みながら問題を解決できます。 どうしますか? □ 仕方がないから「ダイアログで遊ぼう」を閲覧。 □ 「渡部シンイチのDejavu WORLD」を閲覧。
  • 12. 文字化け Powered by Rabbit 2.1.6 文字化けの原因 1. 文字コードが正しくない
  • 13. 文字化け Powered by Rabbit 2.1.6 文字コード Charset, 文字集合 エンコーディング方式 シフトJIS, 日本語EUC, UTF-8 等 文字のバイト表現
  • 14. 文字化け Powered by Rabbit 2.1.6 日本語の文字コード UTF-8 (Unicode 今は普通はこれ) SHIFT_JIS (Windows) EUC-JP (昔の UNIX) ISO-2022-JP (メール)
  • 15. 文字化け Powered by Rabbit 2.1.6 同じ文字でも異なるコード 「あ」 UTF-8 (E3 81 82) EUC-JP (A4 A2) SHIFT_JIS (82 A0)
  • 16. 文字化け Powered by Rabbit 2.1.6 同じバイト列でも別の文字 C2 A9 UTF-8 「©」 EUC-JP 「息」 SHIFT_JIS 「ツゥ」
  • 17. 文字化け Powered by Rabbit 2.1.6 バイト列だけでは 文字コードはわからない
  • 18. 文字化け Powered by Rabbit 2.1.6 ところで 日本語文字のことを「2バイト文字」と言ってま せんか? UTF-8は日本語はだいたい3バイト 「あ」(E3 81 82) 「ア」(EF BD B1)
  • 19. 文字化け Powered by Rabbit 2.1.6 文字化けした文字列の 元の文字コードの見分け方
  • 20. 文字化け Powered by Rabbit 2.1.6 慣れるとパッと見でわかる
  • 21. 文字化け Powered by Rabbit 2.1.6 EUC-JP を SHIFT_JIS として表示 半角カナが多い 日本語にほんごニホンゴ ニ?ワク?ヒ、ロ、?エ・ヒ・ロ・?エ
  • 22. 文字化け Powered by Rabbit 2.1.6 UTF-8 を SHIFT_JIS として表示 画数の多い漢字の中に半角カナが少々混じってる 日本語にほんごニホンゴ 譌・譛ャ隱槭↓縺サ繧薙#繝九?繝ウ繧エ
  • 23. 文字化け Powered by Rabbit 2.1.6 ISO-2022-JP の ESC 落ち ASCII文字だけで構成されて「$B」「(B」がある 日本語にほんごニホンゴ ?$BF|K8l$K$[$s$4%K%[%s%4?(B
  • 24. 文字化け Powered by Rabbit 2.1.6 文字化けの原因 2. 文字コードが不明
  • 25. 文字化け Powered by Rabbit 2.1.6 自動判定もできるけど 完全じゃない
  • 26. 文字化け Powered by Rabbit 2.1.6 同じバイト列でも別の文字(再掲) C2 A9 UTF-8 「©」 EUC-JP 「息」 SHIFT_JIS 「ツゥ」
  • 27. 文字化け Powered by Rabbit 2.1.6 自動判定 バイト列が文字コードの正当な範囲にあるか どうかで判定 文字列が短いと難しい 文字列が長ければ精度は上がる へんなバイトが混在してたらアウト 日本語じゃないのに日本語と誤判定したり
  • 28. 文字化け Powered by Rabbit 2.1.6 EUC - Extended Unix Code EUC-JP : 日本語EUC EUC-KR : 韓国語EUC EUC-CN : 簡体字中国語EUC 文字コードの範囲は同じだけど文字が違う BB FA : 字(JP) / 샙(KR) / 机(CN)
  • 29. 文字化け Powered by Rabbit 2.1.6 文字境界 EUC 1バイト文字 (00-7F) ← ASCII 2バイト文字 (A1-F4 | A1-FE) 文字列の先頭から見ないとわからない SHIFT_JIS 1バイト文字 (00-7F A1-DF) ← JISX0201 2バイト文字 (81-9F E0-FC | 40-7E 80-FC) 2バイト目に ASCII 範囲含んでてやばい
  • 30. 文字化け Powered by Rabbit 2.1.6 文字境界 UTF-8 1バイト文字 (00-7F) ← ASCII 2バイト文字 (C2-DF | 80-BF) 3バイト文字 (E0-EF | 80-BF | 80-BF) 4バイト文字 (F0-F7 | 80-BF | 80-BF | 80-BF) 文字境界判別しやすい
  • 31. 文字化け Powered by Rabbit 2.1.6 文字化けの原因 3. 機種依存文字
  • 32. 文字化け Powered by Rabbit 2.1.6 ISO-2022-JP いわゆる「JISコード」 日本語メールで使われる文字コードは未だ に ISO-2022-JP が主流 と ¥ を使い分けできる ISO-2022-JP に無い文字 ① ② ③ Ⅰ Ⅱ Ⅲ ㈱ ㎏ ㎝ 髙 﨑 カタカナ
  • 33. 文字化け Powered by Rabbit 2.1.6 ISO-2022-JP に無い文字を ISO-2022-JP と偽ってメールする 奴がいる
  • 34. 文字化け Powered by Rabbit 2.1.6 文字化け
  • 35. 文字化け Powered by Rabbit 2.1.6 昔の Mac だと ① が ㈪ に見えたり
  • 36. 文字化け Powered by Rabbit 2.1.6 だいたいマイクロソフトが悪い
  • 37. 文字化け Powered by Rabbit 2.1.6 MS の ISO-2022-JP CP50221 ISO-2022-JP に無い文字を含む ① ② ③ Ⅰ Ⅱ Ⅲ ㈱ ㎏ ㎝ 髙 﨑 カタカナ と ¥ の区別がつかない
  • 38. 文字化け Powered by Rabbit 2.1.6 まともなメールアプリが 「ISO-2022-JP」を信じると文字 化け
  • 39. 文字化け Powered by Rabbit 2.1.6 まともなメールアプリが責められる 「Outlookだと見えるのに」
  • 40. 文字化け Powered by Rabbit 2.1.6 ISO-2022-JP は CP50221 と みなして表示
  • 41. 文字化け Powered by Rabbit 2.1.6 ISO-2022-JP を ISO-2022-JP として扱うアプリが絶滅
  • 42. 文字化け Powered by Rabbit 2.1.6 文字コードの置き換え ISO-2022-JP : CP50221 EUC-JP : CP51932 SHIFT_JIS : CP932
  • 43. 文字化け Powered by Rabbit 2.1.6 だいたいマイクロソフトが悪い
  • 44. 文字化け Powered by Rabbit 2.1.6 文字化けの原因 4. フォントが無い
  • 45. 文字化け Powered by Rabbit 2.1.6 🍣 🍺 🍮 🍢 🍜 🍶
  • 46. 文字化け Powered by Rabbit 2.1.6 □ □ □ □ □ □
  • 47. 文字化け Powered by Rabbit 2.1.6 対応フォント入れれば解決
  • 48. 文字化け Powered by Rabbit 2.1.6 発表の途中ですがお知らせです
  • 49. 文字化け Powered by Rabbit 2.1.6 FAQ: 下のウサギとカメは何?
  • 50. 文字化け Powered by Rabbit 2.1.6 Rabbit Ruby製プレゼンツール http://rabbit-shocker.org/ ウサギとカメはタイムキーパー カメに追い抜かされなければ時間内 プレゼンがつまらなくても和む ソースはテキスト(RD / Markdown) PDF ビューアとしても利用可
  • 51. 文字化け Powered by Rabbit 2.1.6 Ruby
  • 52. 文字化け Powered by Rabbit 2.1.6 Ruby プログラミング言語 オブジェクト指向スクリプト言語 オブジェクト毎に異なる文字コードが可能 ファイル毎に異なる文字コードが可能 嫌な予感…
  • 53. 文字化け Powered by Rabbit 2.1.6 ファイル 同じファイルからの読み込みでも異なる文字コード になることも f = File.open("何か.txt", "r:utf-8") f.gets #=> 1行文字列 UTF-8 f.read(10) #=> 10バイトデータ ASCII-8BIT
  • 54. 文字化け Powered by Rabbit 2.1.6 異なる文字コード同士 utf8 = "ほげ" sjis = "ほげ".encode("cp932") utf8 == sjis #=> 偽 utf8 + sjis #=> エラー utf8 =~ /#{sjis}/ #=> エラー utf8 = "ASCII" sjis = "ASCII".encode("cp932") utf8 == sjis #=> 真
  • 55. 文字化け Powered by Rabbit 2.1.6 混ぜるな危険!
  • 56. 文字化け Powered by Rabbit 2.1.6 全部 UTF-8 に統一すれば安全
  • 57. 文字化け Powered by Rabbit 2.1.6 MySQL
  • 58. 文字化け Powered by Rabbit 2.1.6 オープンソースの RDBMS
  • 59. 文字化け Powered by Rabbit 2.1.6 文字コード クライアントライブラリ クライアント-サーバー接続 データベース テーブル カラム …毎に設定可能
  • 60. 文字化け Powered by Rabbit 2.1.6 嫌な予感…
  • 61. 文字化け Powered by Rabbit 2.1.6 utf8 と utf8mb4 UTF-8 文字コード utf8 は 3バイトまで utf8mb4 は 4バイトまで 絵文字(🍣や🍺)は4バイト
  • 62. 文字化け Powered by Rabbit 2.1.6 utf8カラムに4バイト文字を入れようとすると 接続が utf8 の場合: mysql> insert into t (c) values ('今日は🍣と🍺'); Query OK, 1 row affected, 1 warning (0.09 sec) mysql> select * from t; +-----------+ | c | +-----------+ | 今日は | +-----------+
  • 63. 文字化け Powered by Rabbit 2.1.6 utf8カラムに4バイト文字を入れようとすると 接続が utf8mb4 の場合: mysql> insert into t (c) values ('今日は🍣と🍺'); Query OK, 1 row affected, 1 warning (0.09 sec) mysql> select * from t; +----------------+ | c | +----------------+ | 今日は?と? | +----------------+
  • 64. 文字化け Powered by Rabbit 2.1.6 utf8mb4カラムに4バイト文字を入れようとすると 接続が utf8mb4 の場合: mysql> insert into t (c) values ('今日は🍣と🍺'); Query OK, 1 row affected (0.06 sec) mysql> select * from t; +----------------------+ | c | +----------------------+ | 今日は🍣と🍺 | +----------------------+
  • 65. 文字化け Powered by Rabbit 2.1.6 utf8mb4カラムに4バイト文字を入れようとすると 接続が utf8 の場合: mysql> insert into t (c) values ('今日は🍣と🍺'); Query OK, 1 row affected, 1 warning (0.06 sec) mysql> select * from t; +--------------------+ | c | +--------------------+ | 今日は????と?? | +--------------------+
  • 66. 文字化け Powered by Rabbit 2.1.6 4バイト文字を utf8 接続から取り出すと mysql> select * from t; +----------------+ | c | +----------------+ | 今日は?と? | +----------------+
  • 67. 文字化け Powered by Rabbit 2.1.6 「?」の調査 mysql> select hex(c) from t; +------------------------------------------+ | hex(c) | +------------------------------------------+ | E4BB8AE697A5E381AFF09F8DA3E381A8F09F8DBA | ←ちゃんと入ってる | E4BB8AE697A5E381AF3F3F3F3FE381A83F3F | ←データが「?」 +------------------------------------------+
  • 68. 文字化け Powered by Rabbit 2.1.6 混ぜるな危険!
  • 69. 文字化け Powered by Rabbit 2.1.6 全部 utf8 / utf8mb4 に統一すれ ば安全
  • 70. 文字化け Powered by Rabbit 2.1.6 まとめ
  • 71. 文字化け Powered by Rabbit 2.1.6 歴史的経緯により日本語には複数 の文字コードが使用されている
  • 72. 文字化け Powered by Rabbit 2.1.6 これからは UTF-8 を使えばみんな ハッピー
  • 73. 文字化け Powered by Rabbit 2.1.6 本当に?
  • 74. 文字化け Powered by Rabbit 2.1.6 Unicode の闇
  • 75. 文字化け Powered by Rabbit 2.1.6 中国語と日本語で文字が統一
  • 76. 文字化け Powered by Rabbit 2.1.6 合成文字 が (E3 81 8C) が (E3 81 8B E3 82 99) 「か」 +「゙」の二文字 比較には正規化が必要
  • 77. 文字化け Powered by Rabbit 2.1.6 色付き絵文字の肌色問題 絵文字は日本発祥 肌色が一種類 「人種差別だ!」 合成文字で解決 これからの絵文字の実装指針、UTR #51“Unicode Emoji”とはなにか -INTERNET Watch http://internet.watch.impress.co.jp/docs/special/20150131_686161.html
  • 78. 文字化け Powered by Rabbit 2.1.6 俺達の戦いはこれからだ!
  • 79. 文字化け Powered by Rabbit 2.1.6 おわり