SlideShare a Scribd company logo
文字コードの基礎
Agenda
1. 文字コードの歴史
2. 文字コードの注意点

3. もし文字化けしたら
文字コードの歴史
日本語文字コードの種類

ISO-2022-jp (JIS)

Shift-JIS
EUC-JP
Unicode
種類が多いですね・・・
なぜ、そんなに派生がある
の?
1990以前は文字コードは
ASCIIってやつしか無かった。
ASCIIは7ビット文字で
128個しか表現できない。
コード範囲(16進) 内容
0x00~0x1F 制御文字(control characters)
0x20
空白(SP)
0x21~0x7E 図形文字(graphic characters)
0x7F
制御文字DEL(delete)
漢字って何種類あるんだっ
け?
128文字?
足りねぇじゃん!!
そこで、1990年ごろ
JISという文字コードが作られま
した。
JISというのは・・・
ASCIIでは7ビットしかねぇか
ら、2バイトにしちゃえば、よく
ね?

2バイト文字の誕生です!
別名でISO-2022-jpって言われているやつです
ね。
しかし、JISにも問題
が・・・
JISはカタカナとか漢字とか
の文字コード範囲が被って
る。
コード範囲(16進) 内容
0x00~0x1F、0x7F 制御コード
0x20~0x7E
ASCII文字
0x21~0x5F
半角カタカナ
0x2121~0x7E7E
漢字 ( 第1バイト・第2バイトとも 0x21~
0x7E )
0x2121~0x7E7E
補助漢字 ( 第1バイト・第2バイトとも 0x21~
0x7E )
見事に被ってますね!
あれ?だめじゃね?
解決するために、エスケープ
文字を準備しました!

コードの範囲が被っているんで、1つの文字の先頭と最後に区切りを入れています。
※ASCIIとの互換を保つために、ASCIIと同じ文字コードの場合は区切り文字は入らない
例:[日本語START]こ[日本語END][半角カタカナSTART]ア[半角カタカナEND]
じゃーいいじゃん
いや、ダメなんです。
エスケープが1つでも欠損する
と全部文字化けする可能性があ
る。
JISは必ずエスケープで始まりエ
スケープで終わるのが前提!
でも、途中でエスケープが無く
なると、文字化けしちゃう/
(^o^)\

[日本語START]こ[日本語END][半角カタカナSTART]ア[半角カタカナEND]
がもし
[日本語START]こ[半角カタカナSTART]ア[半角カタカナEND]
で、[日本語END]が無かったら、残りの文字コードは全て日本語扱いになってしまい、
残りの全部文字化けしてしまう。
他にも、エスケープが入ること
により、文字コードの数が増え
るため、処理が遅くなってしま
う。
そこで、解決するために誕
生したのが・・・
Shift-JIS
EUC-JPもありますが、無視します。
Shift-JISは1バイトを8ビットに
して1つ繰り上げて文字コード
が被らないようにしました。
1 バイト目
文字の種類
0x00~0x1F、0x7F
制御コード
0x20~0x7E
ASCII文字
0xA1~0xDF
半角カタカナ
0x81~0x9F、0xE0~0xFC

2 バイト目

0x40~0x7E、0x80~0xFC

漢字
・・・さすがMicrosoft
天才の降臨です。
あの問題が無ければの話で
すが・・・
有名な5C問題です。
なぜか2バイト目に「5C」を
使ったのかっ!
お前のせいでエスケープし
なきゃならないんだっ!
5C問題とは、
ASCIIと「5C」はバックスラッ
シュなので、多くのプログラム
言語ではエスケープに扱いに
なってしまいます。・・・あと
は分かるな
ちゃんと回避してあげま
しょ
基本的には文字列の後ろにバック
スラッシュをつけます。
「表」のような感じです。

面倒臭ければ
「magic_quotes_gpc」で全部エ
スケープって事もできます。
ISO-2022-JP (RFC 1468、俗に「JIS コード」と呼ばれる文字コード。JIS X 0208 対
応)
ISO-2022-JP-1 (RFC 2237、JIS X 0208 と JIS X 0212 に対応)
ISO-2022-JP-2 (RFC 1554、多言語拡張。JIS X 0208、JIS X 0212、GB 2312、KS X
1001、ISO/IEC 8859-1、ISO/IEC 8859-7 対応)
ISO-2022-JP-3 (JIS X 0213:2000 対応)
ISO-2022-JP-2004 (JIS X 0213:2004 対応)
ISO-2022-CN (RFC 1922、GB 2312、CNS 11643 [第一字面・第二字面]対応)
ISO-2022-CN-EXT (RFC 1922、GB 2312、ISO-IR-165、CNS 11643 [第一字面から
第七字面]対応)
ISO-2022-KR (RFC 1557、KS X 1001 対応)
EUC-JP (JIS X 0208 対応)
EUC-JISX0213 (JIS X 0213:2000 対応)
EUC-JIS-2004 (JIS X 0213:2004 対応)
EUC-KR (RFC 1557、KS X 1001 対応)
GB2312 (別名 EUC-CN。GB 2312 対応)
GBK (Microsoft Windows Codepage 936 対応)
GB18030 (GB 18030 対応)
EUC-TW (CNS 11643 対応)
Shift_JIS (JIS X 0208 対応)
Shift_JISX0213 (JIS X 0213:2000 対応)
Shift_JIS-2004 (JIS X 0213:2004 対応)
Windows-31J (Microsoft Windows Codepage 932 対応)
x-Mac-Japanese (MacJapanese 対応)

ここから文字コードが乱立し
ていきます。
おいおいおい、お前ら勝手にや
り過ぎだし、国際化とか全然考
えてないだろ?
ということで、救世主登場
UTF-8(Unicode)
全世界文字を一つのコードで
表現出来ればいいよね!
でも、2バイトで足りるな?
とりあえず4バイトぐらいにし
とこ
UTF-8(Unicode)の誕生
UTF-8を2バイト文字とか言っちゃうと恥ずかしいことになります。
WEBプログラム組むときは
UTF-8だけでいいです。
新規に限りますが・・・
色々な文字コードの注意
事項。
ASCIIと日本語文字コード
実は、ASCIIの上位互換で、日
本語文字コードが作られてい
ます。
簡単に言うと、上位互換だから、
文字コードが違っても、プログラ
ムなどは動作します。(文字化け
はしますが)
しかし、
UTF16は何も動かないです。
Windowsの内部コードはUTF-16ら
しいので、メモ帳とかで
「Unicode」とか指定するとUTF16になっちゃいます。
(サクラエディタでもありますの
で気をつけて下さい。)
UTF-8の落とし穴
プログラムにBOMが入る
と色々と問題が起きる。
http://fusigidane.seesaa.net/article/129173506.html
Unicodeとかの判定などで使
われるけど、本来UTF-8には
BOMは使われない。
(どっちかというとUTF-16
に使用される。)
普通だったらBOMなんぞ
入らない。
でも・・・
Windowsの内部コードっ
てなんでしたっけ?
UTF-16でしたよね?
そうですね。
Windowsのメモ帳です
ね。
メモ帳で「UTF-8」で設定し
てもBOMありになります。
Windowsのメモ帳は禁止で
す。
そもそもWindowsのメモ帳で開発するやつを見てみたい。
他にも「〜」とかの問題
点もありますが、
自分で調べて下さい。
メール
メールの標準は
ISO-2022-JP(JIS)です。
最近はUFT-8とかにも対応してき
てますが、めっちゃ古いメールク
ライアント使ってる場合は化けし
ます。
可能な限りISO-2022-JPがいいか
もしれません。
WEB開発で文字化けした時の対処
1.まず、エディタを怪しめ
大体5割が原因です。
必ず文字コードを合わせま
しょう。
BOMが入ってないか?とかも
見たほうがいいですね!
2.サーバーを怪しめ
もしかしたらApacheの文字コード
が変わってるかもしれません。
3.DBを怪しめ
新規開発だと結構やっちゃいま
す。
ちゃんとDBも文字コードを合わせ
ましょう。
4.プログラムを怪しめ
実は自分がハマった事があるんで
す。。。
ライブラリが、UTF-8対応じゃな
くて半日ぐらいハマりました。

More Related Content

Viewers also liked

Fontconfigことはじめ
FontconfigことはじめFontconfigことはじめ
Fontconfigことはじめ
Takao Baba
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
kozossakai
 
文字コードとセキュリティ
文字コードとセキュリティ文字コードとセキュリティ
文字コードとセキュリティ
Kenta Yamamoto
 
新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!
Shun Kittaka
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Kenichiro MATOHARA
 
マイコンでマルチタスク
マイコンでマルチタスクマイコンでマルチタスク
マイコンでマルチタスク
Katsuhiko Terawaki
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会
Ryota Suenaga
 
Cコンパイラの改造(未)
Cコンパイラの改造(未)Cコンパイラの改造(未)
Cコンパイラの改造(未)
7shi
 
文字コード基礎論A
文字コード基礎論A文字コード基礎論A
文字コード基礎論A
京大 マイコンクラブ
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
京大 マイコンクラブ
 
Windows改造計画
Windows改造計画Windows改造計画
Windows改造計画
京大 マイコンクラブ
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
 
5分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.05分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.0
Tadashi Mishima
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
 
Line messaging api ハンズオン資料 ver1.2
Line messaging api ハンズオン資料 ver1.2Line messaging api ハンズオン資料 ver1.2
Line messaging api ハンズオン資料 ver1.2
hajime sato
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
tsudaa
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
京大 マイコンクラブ
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 

Viewers also liked (20)

Fontconfigことはじめ
FontconfigことはじめFontconfigことはじめ
Fontconfigことはじめ
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
 
文字コードとセキュリティ
文字コードとセキュリティ文字コードとセキュリティ
文字コードとセキュリティ
 
新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
 
マイコンでマルチタスク
マイコンでマルチタスクマイコンでマルチタスク
マイコンでマルチタスク
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会
 
Cコンパイラの改造(未)
Cコンパイラの改造(未)Cコンパイラの改造(未)
Cコンパイラの改造(未)
 
文字コード基礎論A
文字コード基礎論A文字コード基礎論A
文字コード基礎論A
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
 
Windows改造計画
Windows改造計画Windows改造計画
Windows改造計画
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
5分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.05分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.0
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
Line messaging api ハンズオン資料 ver1.2
Line messaging api ハンズオン資料 ver1.2Line messaging api ハンズオン資料 ver1.2
Line messaging api ハンズオン資料 ver1.2
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 

文字コード勉強会