SlideShare une entreprise Scribd logo
1  sur  35
文字コード入門
理論編
2013/07/30
baba@BPS
クイズ付き
本資料について
• 本資料は、社内勉強会で使った資料です
– 外部向けに書かれていない記述がある可能性
があります
– 正確な解説を省いている箇所があります
• 本資料の取り扱いについて
– 再配布等のご相談はbaba@bpsinc.jpまでお願
いします。
はじめに
• 今回は文字コードの用語解説と基礎知識の話
です
• 話さないこと
– RubyやJavaやCでどのように書けば良いか、と
いった実装の話
– 文字コード変換、文字化けに関する話
– フォントに関する話
– Unicodeの細かい話
– バイナリな話
• 後半にクイズがあります
目次
• 文字集合と文字エンコーディング
– 文字集合
– 符号化文字集合
– 文字符号化形式
• クイズ
• ちょっとUnicodeの話
文字集合と文字エンコーディン
グ
用語を理解しよう
文字集合と文字エンコーディン
グ
• 文字集合
– Character Set
• 符号化文字集合
– Coded Character Set
• 文字符号化方式
– Character Encoding Scheme
• 符号点
– Code Point
※”charset”は文字集合ではない
文字集合と文字エンコーディン
グ
a あ 𠮟
Unicode
Code Point
U+61 U+3042 U+209BF
JIS X 0208
Code Point
3区65点
※例示字体は全角
4区2点 -
ASCII 0x61 - -
Shift_JIS 0x61 0x82A0 -
UTF-8 0x61 0xE38182 0xF0A0AE9F
UTF-16 0x0061 0x3042 0xD842 0xDF9F
UTF-32 0x00000061 0x00003042 0x000209BF
文字集合
• 数字
– 0-9の10文字
• ラテン文字
– A-Z大文字小文字の52文字
• ひらがな、カタカナ
• ギリシア文字
• 記号
• 漢字
JISの文字集合
• 非漢字
– 数字、ラテン文字、記号など 約500文字
• 第一水準
– 常用漢字のほぼすべて、人名用漢字、その他日常的に使う
漢字 約3,000文字
• 第二水準
– 動植物名漢字など 約3,300文字
• 第三水準
– あまり使わない漢字 約1,200文字
– でも常用漢字が含まれている
• 第四水準
– あまり使わない漢字 約2,400文字
符号化文字集合
• JIS X 0208
– JIS第一、第二水準を含む約6,000文字
• JIS X 0212
– JIS X 0208に含まれない補助漢字約6,000文字
• JIS X 0213
– JIS X 0213:2000
• JIS第一~第四水準漢字などを含む約12,000文字
– JIS X 0213:2004
• 例示字体の変更(1点しんにょう→2点しんにょう)
• 文字の追加
– JIS X 0213:2012
• 情報漢字表改定に伴うマイナーチェンジ
符号化文字集合
• UCS-2
– Unicode 0面
• BMP (Basic Multilingual Plane)
– U+0 ~ U+FFFF
• 65536文字分
• UCS-4
– Unicodeで扱うすべて
– U+0 ~ U+10FFFF
• 約111万文字分
符号化文字集合
ラテン文字
第一水準漢字
第三水準漢字
第二水準漢字
第四水準漢字
数字
記号
ひらがな/カタカ
ナ
ISO 646
UCS2
JIS X 0208
JIS X 0213
ハングル
ギリシア文字
キリル文字
ヘブライ文字
ルーン文字
モンゴル文字
顔文字
古代文字
麻雀牌
錬金術記号
UCS4
JIS X 0212
文字符号化方式
• ISO646
– 7bitで英数字を表現(ASCIIコード)
• Shift_JIS
– 1~2バイトで日本語を表現
– 日本語Windowsでよく使われる(実際はCP932のことも多い)
• EUC-JP
– 1~2バイトで日本語を表現
– 日本語Linuxでよく使われる
• ISO-8859-1
– 8bitでASCII+αを表現する(latin-1)
– 欧米でよく使われる
• ISO-2022-JP
– 7bitでエスケープシーケンスを使って日本語を表現
– ステートフルなエンコーディング
– 日本語メールでよく使われる
文字符号化方式
• UTF-8
– Webでよく使われる
• UTF-16
– UCS-2とBMP内で対応
– Java, Windows, Pythonなどの内部文字コード
• UTF-32
– UCS-4と対応
– ユーザレベルではあまり使わない
クイズ
この文字エンコーディングは?
• Amazonで日本語商品を表示した
• どれでしょう
– Shift_JIS
– UTF-8
– UTF-16
– Unicode Code Point
• 標準仕様?Webサイト依存?ブラウザ依存?
7bit文字エンコーディングはどれ?
• ISO646 (ASCII)
• Shift_JIS
• EUC-JP
• ISO-8859-1
• ISO-2022-JP
• UTF-8
• UTF-16
• UTF-32
7bit文字エンコーディングはどれ?
• ISO646 (ASCII)
• Shift_JIS
• EUC-JP
• ISO-8859-1
• ISO-2022-JP
• UTF-8
• UTF-16
• UTF-32
ASCII互換エンコーディングはど
れ?
• Shift_JIS
• EUC-JP
• ISO 8859-1
• ISO-2022-JP
• UTF-8
• UTF-16
• UTF-32
ASCII互換エンコーディングはど
れ?
• Shift_JIS
• EUC-JP
• ISO 8859-1
• ISO-2022-JP
• UTF-8
• UTF-16
• UTF-32
バイト数から文字数を求められる
のは?
• ISO646 (ASCII)
• Shift_JIS
• EUC-JP
• ISO 8859-1
• ISO-2022-JP
• UTF-8
• UTF-16
• UTF-32
※改行やBOM、制御文字などは気にしない
バイト数から文字数を求められる
のは?
• ISO646 (ASCII)
• Shift_JIS
• EUC-JP
• ISO 8859-1
• ISO-2022-JP
• UTF-8
• UTF-16
• UTF-32 (コードポイント数は求められ
る)
UTF-8で1文字の最大バイト数
は?
• 1バイト
• 2バイト
• 3バイト
• 4バイト
• 5バイト
• 6バイト
• 7バイト
• 8バイト
• 9バイト
• それ以上
UTF-8で1文字の最大バイト数
は?
• 1バイト
• 2バイト
• 3バイト
• 4バイト (Unicode文字が割り当てられる範囲)
• 5バイト
• 6バイト (旧UTF-8の規格上)
• 7バイト
• 8バイト (実用上の最大バイト数)
• 9バイト
• それ以上 (合成用文字を使った場合)
実際に標準に存在するのはどれ?
• UTF-1
• UTF-4
• UTF-7
• UTF-9
• UTF-15
• UTF-64
実際に標準に存在するのはどれ?
• UTF-1
• UTF-4
• UTF-7
• UTF-9
• UTF-15
• UTF-64
ちょっとUNICODEの話
群、面、区、点
• 古いUCS, UCS-4: 31bit
– 7bitの群、8bitの面、8bitの区、8bitの点
– 32768 * 65536 * 65536 * 65536 =>21億文字分
– こんな使わなくね!?
• 今のUCS, Unicode
– 群は廃止、4bitの面、8bitの区、8bitの点
– 16 * 65536 * 65536 => 111万文字分
面
• 0面
– BMP (Basic Multilingual Plane)
– 基本多言語面
• 1面
– SMP (Supplementary Multilingual Plane)
– 追加多言語面
• 2面
– SIP (Supplimentary Ideographic Plane)
– 追加漢字面
• 3面
– 古代文字の予定
• 4-13面
– 用途未定
• 14面
– SSP (Supplimentary Special-purpose Plane)
– 追加特殊用途面
• 15-16面
– 私用面
BOM (Byte Order Mark)
• UTF-8
– 0xEF 0xBB 0xBF
– 意味ない
• UTF-16
– 0xFE 0xFF (big endian)
– 0xFF 0xFE (little endian)
• UTF-32
– 0x00 0x00 0xFE 0xFF (big endian)
– 0xFF 0xFE 0x00 0x00 (little endian)
サロゲートペア
• UTF-16でBMP以外を表現するときに必要
• Javaでcharは2byte
– 1文字はchar1つで表現できない!
– char String#charAt(int index)
– int String#codePointAt(int index)
IVS (Ideographic Variation Sequence)
• と を表示し分けたい
– 葛飾区と葛城市の市民が納得しない
• 3つの方法
– フォントを変える
– 別のコードポイントを割り当てる
– IVS
• ベース文字 + 異体字セレクタ
• IVD
– Adobe-Japan1
– Hanyo-Denshi
終わりに
まとめ
• 自分が扱っている文字列が、どのようなバイ
ト列になっているか、たまには意識しよう
– デバッグ時に役立ちます
• 実務で生かそう
– 文字化けした!チェックポイントは?
• 文字符号化方式の解釈が異なっている?
• 文字集合に存在しない?
• コードポイントが間違っている?
• フォントに文字が入っていない?
– Javaで1文字をcharで表現できると思わないでね
• 今や常用漢字も表現できない
• WindowsのTCHARも全く同じ
もっと詳しく知りたい人は
定番
超おすすめ
ちょっと誤植多いけど
IVSがよく分かる
読み物
標準化の裏側

Contenu connexe

En vedette

Unicode文字プロパティ
Unicode文字プロパティUnicode文字プロパティ
Unicode文字プロパティShozo Hatta
 
Fontconfigことはじめ
FontconfigことはじめFontconfigことはじめ
FontconfigことはじめTakao Baba
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)Hiroshi Tokumaru
 
Google Translator Toolkitと翻訳メモリ(ノーカット版)
Google Translator Toolkitと翻訳メモリ(ノーカット版)Google Translator Toolkitと翻訳メモリ(ノーカット版)
Google Translator Toolkitと翻訳メモリ(ノーカット版)Shozo Hatta
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Kenichiro MATOHARA
 
新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!Shun Kittaka
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)kozossakai
 
文字コードとセキュリティ
文字コードとセキュリティ文字コードとセキュリティ
文字コードとセキュリティKenta Yamamoto
 
マイコンでマルチタスク
マイコンでマルチタスクマイコンでマルチタスク
マイコンでマルチタスク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
 
5分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.05分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.0Tadashi Mishima
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題tsudaa
 

En vedette (20)

Unicode文字プロパティ
Unicode文字プロパティUnicode文字プロパティ
Unicode文字プロパティ
 
Fontconfigことはじめ
FontconfigことはじめFontconfigことはじめ
Fontconfigことはじめ
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
Google Translator Toolkitと翻訳メモリ(ノーカット版)
Google Translator Toolkitと翻訳メモリ(ノーカット版)Google Translator Toolkitと翻訳メモリ(ノーカット版)
Google Translator Toolkitと翻訳メモリ(ノーカット版)
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
 
新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!新しい生活をLinuxといっしょに始めよう!
新しい生活をLinuxといっしょに始めよう!
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
 
文字コードとセキュリティ
文字コードとセキュリティ文字コードとセキュリティ
文字コードとセキュリティ
 
マイコンでマルチタスク
マイコンでマルチタスクマイコンでマルチタスク
マイコンでマルチタスク
 
オープン・ソースで構築する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++ マルチスレッド 入門
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 

Dernier

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Dernier (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

文字コード入門 理論編 クイズ付き