視覚で理解する日本語文字コード

# はじめに

日本語の文章の文字コードを判定するにあたり、それぞれの文字コードで使用される値の範囲について調べてみました。

## UTF-8について

文字を1～4バイトで表現します。1バイト目と2～4バイト目では値の範囲が被りません。  
![utf8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193449/97bdf208-c47c-ae93-9847-3733d2d0225e.png)  

|文字|バイト数|1バイト目|2バイト目|3バイト目|4バイト目|
|:----|:----|:----|:----|:----|:----|
|[ASCIIコード](https://e-words.jp/p/r-ascii.html)|1|00-7F|-|-|-|
|2バイト表現文字|2|C2-DF|80-BF|-|-|
|3バイト表現文字|3|E0-EF|80-BF|80-BF|-|
|4バイト表現文字|4|F0-F4|80-BF|80-BF|80-BF|
|参考）かな|3|E3|81-83|80-BF|-|
|　　　[常用漢字](https://ja.wiktionary.org/wiki/%E4%BB%98%E9%8C%B2:%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7)|3|E4-E9|80-BF|80-BF|-|

日本語の文章であればひらがな、カタカナ、漢字が多く含まれると考えられるのでバイナリとしては`E*-8*-8*`のような3バイト表現が多く出現することになります。  

参考）  
* [UTF-8 - Wikipedia](https://ja.wikipedia.org/wiki/UTF-8)  
* [Unicode - Wikipedia](https://ja.wikipedia.org/wiki/Unicode)  
* [Unicode一覧 0000-0FFF - Wikipedia](https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF)  
* [Unicode表](https://seiai.ed.jp/sys/text/csd/mcodes/ucodeindex.html)  
* [UnicodeをUTF-8やUTF-16に変換する方法 - Qiita](https://qiita.com/yasushi-jp/items/b006f7170ef3a86de09f)  
* [第4回　UTF-8の冗長なエンコード | gihyo.jp](https://gihyo.jp/admin/serial/01/charcode/0004)  



## Shift_JISについて

文字を1～2バイトで表現します。2バイト目にASCIIコードと被る領域があるため[ダメ文字](https://www.google.co.jp/search?q=shift-jis+%E3%83%80%E3%83%A1%E6%96%87%E5%AD%97)といった問題が発生します。  
![sjis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193449/dcce5608-28d3-050b-aca5-8566bd899bb7.png)  

|文字|バイト数|1バイト目|2バイト目|
|:----|:----|:----|:----|
|[ASCIIコード](https://e-words.jp/p/r-ascii.html)|1|00-7F|-|
|半角カタカナ|1|A1-DF|-|
|上記以外|2|81-9F,E0-FC|40-7E,80-FC|
|参考）かな|2|82-83|40-F1|
|　　　[常用漢字](https://ja.wiktionary.org/wiki/%E4%BB%98%E9%8C%B2:%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7)|2|88-9F,E0-E3,E6,E7|40-7E,80-FC|

日本語の文章であればひらがな、カタカナ、漢字が多く含まれると考えられるのでバイナリとしては`8*-**`のような2バイト表現が多く出現することになります。  

参考）  
* [Shift_JIS - Wikipedia](https://ja.wikipedia.org/wiki/Shift_JIS)  
* [Microsoftコードページ932 - Wikipedia](https://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932)  
* [文字コード表 シフトJIS(Shift_JIS)](http://charset.7jp.net/sjis.html)  

バイナリを確認したとき、値が上記の表の範囲内であればShift_JISと判定できそうですが、例えば、UTF-8のテキストファイル


```:utf8n.txt
アイウエオカガキギクグケゲコゴサザシジスズセゼソゾタちぢつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみメモヤユヨラリルレロワヲン湾丼傲刹哺喩嘲恣惧憬摯楷鬱璧緻諧貪踪辣錮挨悪握圧扱以囲慰為異移維緯衣遺医育壱逸稲茨印咽員姻飲淫院陰韻右羽雨臼渦浦雲営影永泳英鋭液疫悦閲宴延怨援沿猿艶塩凹央奥押旺横欧殴岡憶俺卸恩温音仮価佳可家寡架河火稼花荷華課貨画芽解快怪改械海灰絵劾害慨涯該骸垣柿拡格核殻獲確穫郭閣革学岳楽割括活株瓦乾勧巻堪干幹患慣憾敢棺款漢環監管簡緩缶艦観貫関陥館丸含岸玩眼岩危器基幾揮机既帰汽畿季貴起飢鬼偽戯擬欺義議喫詰却客吸宮急朽泣究窮糾給旧去巨許享京競共凶叫峡強恭狭矯胸郷鏡響仰業曲極勤巾錦斤琴謹句区苦具空偶串靴繰勲薫群郡傾形恵慶憩掲携敬景稽系詣警軽芸鯨決穴件倹健兼券剣建憲懸拳権犬献絹肩賢遣鍵険厳幻弦現舷古呼固孤己庫弧戸枯股顧娯御誤護交侯公効勾口好工巧幸康控攻更校洪港甲硬稿綱肯航衡貢購酵鉱鋼号拷豪刻国酷腰骨込困墾恨根混紺左差査座挫債催妻宰彩採栽歳災祭細剤在罪財阪咲埼搾昨柵索錯刷拶撮擦札殺皿山惨散産酸斬暫伺使刺司史嗣士姿師支施旨止死糸紫肢至詩試諮飼歯似寺次治璽示耳自鹿軸叱執失室湿疾質捨赦煮社遮邪勺尺爵若弱主朱狩種腫趣呪寿樹周就修拾臭襲蹴週酬獣縦宿縮塾出述春瞬循旬潤盾巡遵処庶署書諸助女除傷召唱奨宵彰承昭晶松沼焼焦照祥称粧紹証詳象剰場嬢常条状畳蒸譲醸嘱飾拭職色触辱尻伸信侵審振新森浸深申紳臣芯薪親診身進人尽陣酢図吹帥推水睡衰数枢据裾寸瀬是制勢性政整晴正牲精声製西隻席斥石績責赤跡接設説雪絶宣戦羨腺船薦詮践選遷銭鮮漸然全膳措曽訴阻遡僧創喪壮爽層想挿早曹巣槽燥痩相葬藻走遭蔵側即息測足孫太汰唾妥惰対帯戴替泰貸逮代台大第沢濯諾奪脱谷誰丹探旦淡炭短端綻団弾断段男値知地恥痴置致竹秩茶嫡中仲抽昼柱注虫衷鋳貯帳張彫徴懲潮町眺聴脹腸調跳長鳥直鎮陳津追漬潰坪爪釣鶴亭偵堤庭廷抵諦邸泥敵滴適溺哲徹撤迭典天添貼転点殿田電妬渡登賭都努度奴冬島悼搭東湯灯統到藤陶頭騰憧瞳童胴匿徳特督篤独読凸屯那難尼虹日乳入尿任寧猫熱年念捻悩能脳農波派破罵馬俳杯肺輩培買売陪伯白舶迫麦箱箸八鉢発髪罰閥伴判搬板氾犯班般藩販煩飯晩番盤蛮否彼悲批披疲皮罷肥被費避尾微鼻匹姫百俵氷票表貧頻瓶夫婦扶敷普浮父符賦赴侮武部風副復腹沸物噴墳憤奮雰併兵幣平並蔽米別編辺便歩暮簿倣俸報峰崩抱放方泡砲縫芳訪邦飽亡妨帽房暴紡肪膨貿防墨撲朴牧睦没本翻凡摩磨麻妹昧抹末繭慢漫味未岬夢無霧婿冥命迷鳴綿面麺模盲網木目戻冶弥矢役薬訳柳油諭輸唯優幽湧猶由郵幼容庸揺溶用窯謡陽欲浴翼裸来頼雷絡落酪乱卵濫覧利履梨痢離陸略硫侶慮両寮涼瞭糧良陵倫臨輪隣累令冷励礼鈴隷零齢暦歴劣練連錬路露労楼浪六録話
```

は上記の表の範囲内しか使用していないためShift_JISと誤判定してしまいます。上記ファイルをShift_JISとして開くと

```:utf8n.txt
繧｢繧､繧ｦ繧ｨ繧ｪ繧ｫ繧ｬ繧ｭ繧ｮ繧ｯ繧ｰ繧ｱ繧ｲ繧ｳ繧ｴ繧ｵ繧ｶ繧ｷ繧ｸ繧ｹ繧ｺ繧ｻ繧ｼ繧ｽ繧ｾ繧ｿ縺｡縺｢縺､縺･縺ｦ縺ｧ縺ｨ縺ｩ縺ｪ縺ｫ縺ｬ縺ｭ縺ｮ縺ｯ縺ｰ縺ｱ縺ｲ縺ｳ縺ｴ縺ｵ縺ｶ縺ｷ縺ｸ縺ｹ縺ｺ縺ｻ縺ｼ縺ｽ縺ｾ縺ｿ繝｡繝｢繝､繝ｦ繝ｨ繝ｩ繝ｪ繝ｫ繝ｬ繝ｭ繝ｯ繝ｲ繝ｳ貉ｾ荳ｼ蛯ｲ蛻ｹ蜩ｺ蝟ｩ蝌ｲ諱｣諠ｧ諞ｬ鞫ｯ讌ｷ鬯ｱ迺ｧ邱ｻ隲ｧ雋ｪ雕ｪ霎｣骭ｮ謖ｨ謔ｪ謠｡蝨ｧ謇ｱ莉･蝗ｲ諷ｰ轤ｺ逡ｰ遘ｻ邯ｭ邱ｯ陦｣驕ｺ蛹ｻ閧ｲ螢ｱ騾ｸ遞ｲ闌ｨ蜊ｰ蜥ｽ蜩｡蟋ｻ鬟ｲ豺ｫ髯｢髯ｰ髻ｻ蜿ｳ鄒ｽ髮ｨ閾ｼ貂ｦ豬ｦ髮ｲ蝟ｶ蠖ｱ豌ｸ豕ｳ闍ｱ驪ｭ豸ｲ逍ｫ謔ｦ髢ｲ螳ｴ蟒ｶ諤ｨ謠ｴ豐ｿ迪ｿ濶ｶ蝪ｩ蜃ｹ螟ｮ螂･謚ｼ譌ｺ讓ｪ谺ｧ谿ｴ蟯｡諞ｶ菫ｺ蜊ｸ諱ｩ貂ｩ髻ｳ莉ｮ萓｡菴ｳ蜿ｯ螳ｶ蟇｡譫ｶ豐ｳ轣ｫ遞ｼ闃ｱ闕ｷ闖ｯ隱ｲ雋ｨ逕ｻ闃ｽ隗｣蠢ｫ諤ｪ謾ｹ譴ｰ豬ｷ轣ｰ邨ｵ蜉ｾ螳ｳ諷ｨ豸ｯ隧ｲ鬪ｸ蝙｣譟ｿ諡｡譬ｼ譬ｸ谿ｻ迯ｲ遒ｺ遨ｫ驛ｭ髢｣髱ｩ蟄ｦ蟯ｳ讌ｽ蜑ｲ諡ｬ豢ｻ譬ｪ逑ｦ荵ｾ蜍ｧ蟾ｻ蝣ｪ蟷ｲ蟷ｹ謔｣諷｣諞ｾ謨｢譽ｺ谺ｾ貍｢迺ｰ逶｣邂｡邁｡邱ｩ郛ｶ濶ｦ隕ｳ雋ｫ髢｢髯･鬢ｨ荳ｸ蜷ｫ蟯ｸ邇ｩ逵ｼ蟯ｩ蜊ｱ蝎ｨ蝓ｺ蟷ｾ謠ｮ譛ｺ譌｢蟶ｰ豎ｽ逡ｿ蟄｣雋ｴ襍ｷ鬟｢鬯ｼ蛛ｽ謌ｯ謫ｬ谺ｺ鄒ｩ隴ｰ蝟ｫ隧ｰ蜊ｴ螳｢蜷ｸ螳ｮ諤･譛ｽ豕｣遨ｶ遯ｮ邉ｾ邨ｦ譌ｧ蜴ｻ蟾ｨ險ｱ莠ｫ莠ｬ遶ｶ蜈ｱ蜃ｶ蜿ｫ蟲｡蠑ｷ諱ｭ迢ｭ遏ｯ閭ｸ驛ｷ髀｡髻ｿ莉ｰ讌ｭ譖ｲ讌ｵ蜍､蟾ｾ骭ｦ譁､逅ｴ隰ｹ蜿･蛹ｺ闍ｦ蜈ｷ遨ｺ蛛ｶ荳ｲ髱ｴ郢ｰ蜍ｲ阮ｫ鄒､驛｡蛯ｾ蠖｢諱ｵ諷ｶ諞ｩ謗ｲ謳ｺ謨ｬ譎ｯ遞ｽ邉ｻ隧｣隴ｦ霆ｽ闃ｸ魃ｨ豎ｺ遨ｴ莉ｶ蛟ｹ蛛･蜈ｼ蛻ｸ蜑｣蟒ｺ諞ｲ諛ｸ諡ｳ讓ｩ迥ｬ迪ｮ邨ｹ閧ｩ雉｢驕｣骰ｵ髯ｺ蜴ｳ蟷ｻ蠑ｦ迴ｾ闊ｷ蜿､蜻ｼ蝗ｺ蟄､蟾ｱ蠎ｫ蠑ｧ謌ｸ譫ｯ閧｡鬘ｧ螽ｯ蠕｡隱､隴ｷ莠､萓ｯ蜈ｬ蜉ｹ蜍ｾ蜿｣螂ｽ蟾･蟾ｧ蟷ｸ蠎ｷ謗ｧ謾ｻ譖ｴ譬｡豢ｪ貂ｯ逕ｲ遑ｬ遞ｿ邯ｱ閧ｯ闊ｪ陦｡雋｢雉ｼ驟ｵ驩ｱ驪ｼ蜿ｷ諡ｷ雎ｪ蛻ｻ蝗ｽ驟ｷ閻ｰ鬪ｨ霎ｼ蝗ｰ蠅ｾ諱ｨ譬ｹ豺ｷ邏ｺ蟾ｦ蟾ｮ譟ｻ蠎ｧ謖ｫ蛯ｵ蛯ｬ螯ｻ螳ｰ蠖ｩ謗｡譬ｽ豁ｳ轣ｽ逾ｭ邏ｰ蜑､蝨ｨ鄂ｪ雋｡髦ｪ蜥ｲ蝓ｼ謳ｾ譏ｨ譟ｵ邏｢骭ｯ蛻ｷ諡ｶ謦ｮ謫ｦ譛ｭ谿ｺ逧ｿ螻ｱ諠ｨ謨｣逕｣驟ｸ譁ｬ證ｫ莨ｺ菴ｿ蛻ｺ蜿ｸ蜿ｲ蝸｣螢ｫ蟋ｿ蟶ｫ謾ｯ譁ｽ譌ｨ豁｢豁ｻ邉ｸ邏ｫ閧｢閾ｳ隧ｩ隧ｦ隲ｮ鬟ｼ豁ｯ莨ｼ蟇ｺ谺｡豐ｻ迺ｽ遉ｺ閠ｳ閾ｪ鮖ｿ霆ｸ蜿ｱ蝓ｷ螟ｱ螳､貉ｿ逍ｾ雉ｪ謐ｨ襍ｦ辣ｮ遉ｾ驕ｮ驍ｪ蜍ｺ蟆ｺ辷ｵ闍･蠑ｱ荳ｻ譛ｱ迢ｩ遞ｮ閻ｫ雜｣蜻ｪ蟇ｿ讓ｹ蜻ｨ蟆ｱ菫ｮ諡ｾ閾ｭ隘ｲ雹ｴ騾ｱ驟ｬ迯｣邵ｦ螳ｿ邵ｮ蝪ｾ蜃ｺ霑ｰ譏･迸ｬ蠕ｪ譌ｬ貎､逶ｾ蟾｡驕ｵ蜃ｦ蠎ｶ鄂ｲ譖ｸ隲ｸ蜉ｩ螂ｳ髯､蛯ｷ蜿ｬ蜚ｱ螂ｨ螳ｵ蠖ｰ謇ｿ譏ｭ譎ｶ譚ｾ豐ｼ辟ｼ辟ｦ辣ｧ逾･遘ｰ邊ｧ邏ｹ險ｼ隧ｳ雎｡蜑ｰ蝣ｴ螫｢蟶ｸ譚｡迥ｶ逡ｳ闥ｸ隴ｲ驢ｸ蝌ｱ鬟ｾ諡ｭ閨ｷ濶ｲ隗ｦ霎ｱ蟆ｻ莨ｸ菫｡萓ｵ蟇ｩ謖ｯ譁ｰ譽ｮ豬ｸ豺ｱ逕ｳ邏ｳ閾｣闃ｯ阮ｪ隕ｪ險ｺ霄ｫ騾ｲ莠ｺ蟆ｽ髯｣驟｢蝗ｳ蜷ｹ蟶･謗ｨ豌ｴ逹｡陦ｰ謨ｰ譫｢謐ｮ陬ｾ蟇ｸ轢ｬ譏ｯ蛻ｶ蜍｢諤ｧ謾ｿ謨ｴ譎ｴ豁｣迚ｲ邊ｾ螢ｰ陬ｽ隘ｿ髫ｻ蟶ｭ譁･遏ｳ邵ｾ雋ｬ襍､霍｡謗･險ｭ隱ｬ髮ｪ邨ｶ螳｣謌ｦ鄒ｨ閻ｺ闊ｹ阮ｦ隧ｮ霍ｵ驕ｸ驕ｷ驫ｭ魄ｮ貍ｸ辟ｶ蜈ｨ閹ｳ謗ｪ譖ｽ險ｴ髦ｻ驕｡蜒ｧ蜑ｵ蝟ｪ螢ｮ辷ｽ螻､諠ｳ謖ｿ譌ｩ譖ｹ蟾｣讒ｽ辯･逞ｩ逶ｸ闡ｬ阯ｻ襍ｰ驕ｭ阡ｵ蛛ｴ蜊ｳ諱ｯ貂ｬ雜ｳ蟄ｫ螟ｪ豎ｰ蜚ｾ螯･諠ｰ蟇ｾ蟶ｯ謌ｴ譖ｿ豕ｰ雋ｸ騾ｮ莉｣蜿ｰ螟ｧ隨ｬ豐｢豼ｯ隲ｾ螂ｪ閼ｱ隹ｷ隱ｰ荳ｹ謗｢譌ｦ豺｡轤ｭ遏ｭ遶ｯ邯ｻ蝗｣蠑ｾ譁ｭ谿ｵ逕ｷ蛟､遏･蝨ｰ諱･逞ｴ鄂ｮ閾ｴ遶ｹ遘ｩ闌ｶ雖｡荳ｭ莉ｲ謚ｽ譏ｼ譟ｱ豕ｨ陌ｫ陦ｷ驪ｳ雋ｯ蟶ｳ蠑ｵ蠖ｫ蠕ｴ諛ｲ貎ｮ逕ｺ逵ｺ閨ｴ閼ｹ閻ｸ隱ｿ霍ｳ髟ｷ魑･逶ｴ骼ｮ髯ｳ豢･霑ｽ貍ｬ貎ｰ蝮ｪ辷ｪ驥｣鮓ｴ莠ｭ蛛ｵ蝣､蠎ｭ蟒ｷ謚ｵ隲ｦ驍ｸ豕･謨ｵ貊ｴ驕ｩ貅ｺ蜩ｲ蠕ｹ謦､霑ｭ蜈ｸ螟ｩ豺ｻ雋ｼ霆｢轤ｹ谿ｿ逕ｰ髮ｻ螯ｬ貂｡逋ｻ雉ｭ驛ｽ蜉ｪ蠎ｦ螂ｴ蜀ｬ蟲ｶ謔ｼ謳ｭ譚ｱ貉ｯ轣ｯ邨ｱ蛻ｰ阯､髯ｶ鬆ｭ鬨ｰ諞ｧ迸ｳ遶･閭ｴ蛹ｿ蠕ｳ迚ｹ逹｣遽､迢ｬ隱ｭ蜃ｸ螻ｯ驍｣髮｣蟆ｼ陌ｹ譌･荵ｳ蜈･蟆ｿ莉ｻ蟇ｧ迪ｫ辭ｱ蟷ｴ蠢ｵ謐ｻ謔ｩ閭ｽ閼ｳ霎ｲ豕｢豢ｾ遐ｴ鄂ｵ鬥ｬ菫ｳ譚ｯ閧ｺ霈ｩ蝓ｹ雋ｷ螢ｲ髯ｪ莨ｯ逋ｽ闊ｶ霑ｫ鮗ｦ邂ｱ邂ｸ蜈ｫ驩｢逋ｺ鬮ｪ鄂ｰ髢･莨ｴ蛻､謳ｬ譚ｿ豌ｾ迥ｯ迴ｭ闊ｬ阯ｩ雋ｩ辣ｩ鬟ｯ譎ｩ逡ｪ逶､陋ｮ蜷ｦ蠖ｼ謔ｲ謇ｹ謚ｫ逍ｲ逧ｮ鄂ｷ閧･陲ｫ雋ｻ驕ｿ蟆ｾ蠕ｮ鮠ｻ蛹ｹ蟋ｫ逋ｾ菫ｵ豌ｷ逾ｨ陦ｨ雋ｧ鬆ｻ逑ｶ螟ｫ蟀ｦ謇ｶ謨ｷ譎ｮ豬ｮ辷ｶ隨ｦ雉ｦ襍ｴ萓ｮ豁ｦ驛ｨ鬚ｨ蜑ｯ蠕ｩ閻ｹ豐ｸ迚ｩ蝎ｴ蠅ｳ諞､螂ｮ髮ｰ菴ｵ蜈ｵ蟷｣蟷ｳ荳ｦ阡ｽ邀ｳ蛻･邱ｨ霎ｺ萓ｿ豁ｩ證ｮ邁ｿ蛟｣菫ｸ蝣ｱ蟲ｰ蟠ｩ謚ｱ謾ｾ譁ｹ豕｡遐ｲ邵ｫ闃ｳ險ｪ驍ｦ鬟ｽ莠｡螯ｨ蟶ｽ謌ｿ證ｴ邏｡閧ｪ閹ｨ雋ｿ髦ｲ蠅ｨ謦ｲ譛ｴ迚ｧ逹ｦ豐｡譛ｬ鄙ｻ蜃｡鞫ｩ逎ｨ鮗ｻ螯ｹ譏ｧ謚ｹ譛ｫ郢ｭ諷｢貍ｫ蜻ｳ譛ｪ蟯ｬ螟｢辟｡髴ｧ蟀ｿ蜀･蜻ｽ霑ｷ魑ｴ邯ｿ髱｢鮗ｺ讓｡逶ｲ邯ｲ譛ｨ逶ｮ謌ｻ蜀ｶ蠑･遏｢蠖ｹ阮ｬ險ｳ譟ｳ豐ｹ隲ｭ霈ｸ蜚ｯ蜆ｪ蟷ｽ貉ｧ迪ｶ逕ｱ驛ｵ蟷ｼ螳ｹ蠎ｸ謠ｺ貅ｶ逕ｨ遯ｯ隰｡髯ｽ谺ｲ豬ｴ鄙ｼ陬ｸ譚･鬆ｼ髮ｷ邨｡關ｽ驟ｪ荵ｱ蜊ｵ豼ｫ隕ｧ蛻ｩ螻･譴ｨ逞｢髮｢髯ｸ逡･遑ｫ萓ｶ諷ｮ荳｡蟇ｮ豸ｼ迸ｭ邉ｧ濶ｯ髯ｵ蛟ｫ閾ｨ霈ｪ髫｣邏ｯ莉､蜀ｷ蜉ｱ遉ｼ驤ｴ髫ｷ髮ｶ鮨｢證ｦ豁ｴ蜉｣邱ｴ騾｣骭ｬ霍ｯ髴ｲ蜉ｴ讌ｼ豬ｪ蜈ｭ骭ｲ隧ｱ
```

となります。Shift_JISとして使用できる範囲内のため、文字としては正常に表示されますが、日本語の文章としてはおかしくなります。  

例えば`ウ`をUTF-8で表現すると`E3-82-A6`となりますが、これをShift_JISの`E3-82(繧)+A6(ｦ)`と解釈できてしまうためです。上述の通り、ひらがな、カタカナ、漢字をUTF-8で表現すると`E5-9C-A7`のような3バイトになりますが、この場合、Shift_JISの`2バイト表現の漢字`＋`1バイト表現の半角カナ`の組み合わせと認識する可能性があり、  

* UTF-8のひらがな、カタカナの約半数  
* UTF-8の常用漢字の約半数  

はShift_JISと誤認します。そのためShift_JISか判断する場合は「半角カナは文字とみなさない」などの処理が必要になります。

## EUC-JPについて

文字を1～3バイトで表現します。
![euc-jp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193449/4b6789e9-c53a-ccb9-e8dd-b3a04b444c5d.png)  

|文字|バイト数|1バイト目|2バイト目|3バイト目|
|:----|:----|:----|:----|:----|
|[ASCIIコード](https://e-words.jp/p/r-ascii.html)|1|00-7F|-|-|
|2バイト表現文字|2|8E,A1-A8,AD,B0-FE|A1-FE|-|
|3バイト表現文字|3|8F|A1-FE|A1-FE|
|内訳）かな|2|A4,A5|A1-F4| |
|　　　[常用漢字](https://ja.wiktionary.org/wiki/%E4%BB%98%E9%8C%B2:%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7)|2|B0-EE|A1-FE| |

参考） 
* [EUC-JP - Wikipedia](https://ja.wikipedia.org/wiki/EUC-JP)   
* [文字コード表 日本語EUC(euc-jp)](http://charset.7jp.net/euc.html)  
* [Unicode対応 JIS X 0208 文字コード表](http://ash.jp/code/unitbl21.htm)  

## ISO-2022-jp

[エスケープシーケンス](https://x0213.org/wiki/wiki.cgi?page=%A5%A8%A5%B9%A5%B1%A1%BC%A5%D7%A5%B7%A1%BC%A5%B1%A5%F3%A5%B9)で判定できるため、未確認です。

参考）  
* [ISO-2022-JP - Wikipedia](https://ja.wikipedia.org/wiki/ISO-2022-JP)  
* [文字コード表 JISコード(ISO-2022-JP)](http://charset.7jp.net/jis.html)  
* [日本語 (JIS) - ISO-2022-JP-2004 - 文字コード表 | UIC](https://uic.jp/charset/show/iso-2022-jp-2004/)  
* [日本語 (JIS) - ISO-2022-JP-3 - 文字コード表 | UIC](https://uic.jp/charset/show/iso-2022-jp-3/)

## バイナリの確認方法

例えば、UTF-8のテキストファイルの中身が

```:utf8n.txt
あいうえお
```

の場合、バイナリとしては下記のようになります。

```
E3 81 82 E3 81 84 E3 81 86 E3 81 88 E3 81 8A
```

テキストファイルに限らず、ファイルをバイナリとして確認したい場合は、PowerShellの`Format-Hex`で確認できます。

```powershell
PS C:\work> Format-Hex .\utf8n.txt


           パス: C:\work\utf8n.txt

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   E3 81 82 E3 81 84 E3 81 86 E3 81 88 E3 81 8A
```
以下は各文字コードでの`あいうえお`です。1文字の繋がりが分るように`-`を挿入して記載しています。
```javascript
//あいうえお

//UTF8
E3-81-82 E3-81-84 E3-81-86 E3-81-88 E3-81-8A

//UTF8 with BOM
EF BB BF E3-81-82 E3-81-84 E3-81-86 E3-81-88 E3-81-8A

//ISO-2022-JP
1B 24 42 24-22 24-24 24-26 24-28 24-2A

//Shift_JIS
82-A0 82-A2 82-A4 82-A6 82-A8

//EUC-JP
A4-A2 A4-A4 A4-A6 A4-A8 A4-AA
```
複数の文字についてまとめて確認したい場合は、

```csharp:ConsoleApp.cs
//C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc ConsoleApp.cs
using System;
using System.IO;
using System.Text;

namespace ConsoleApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //確認したい文字
            string kana = "ァアあィぃイいゥぅウうヴェエえォオおカかガがキきギぎクくグぐケけゲげコこゴごサさザざシしジじスすズずセせゼぜソそゾぞタたダだチちヂぢツつヅづテてデでトとドどナなニにヌぬネねノのハはバばパぱヒひビびピぴフふブぶプぷヘへベべペぺホほボぼポぽマまミみムむメめモもャゃヤやュゅユゆョょヨよラらリりルるレれロろワわヲをンん";
            string joyo_kanji = "亜哀愛挨悪握圧扱宛安暗案闇以位依偉囲委威尉意慰易椅為畏異移維緯胃萎衣違遺医井域育一壱逸稲茨芋印咽員因姻引飲淫院陰隠韻右宇羽雨臼渦唄浦運雲餌営影映栄永泳英衛詠鋭液疫益駅悦謁越閲円園宴延怨援沿演炎煙猿縁艶遠鉛塩汚凹央奥往応押旺横欧殴王翁黄岡沖億屋憶臆乙俺卸恩温穏音下化仮何価佳加可夏嫁家寡科暇果架歌河火禍稼箇花苛荷華菓課貨過蚊我牙画芽賀雅餓介会解回塊壊快怪悔懐戒拐改械海灰界皆絵開階貝劾外害崖慨概涯蓋街該骸垣柿嚇各拡格核殻獲確穫覚角較郭閣隔革学岳楽額顎掛潟割喝括活渇滑葛褐轄且株釜鎌刈瓦乾冠寒刊勘勧巻喚堪完官寛干幹患感慣憾換敢棺款歓汗漢環甘監看管簡緩缶肝艦観貫還鑑間閑関陥韓館丸含岸玩眼岩頑顔願企伎危喜器基奇寄岐希幾忌揮机旗既期棋棄機帰気汽畿祈季紀規記貴起軌輝飢騎鬼亀偽儀宜戯技擬欺犠疑義議菊吉喫詰却客脚虐逆丘久休及吸宮弓急救朽求泣球究窮級糾給旧牛去居巨拒拠挙虚許距漁魚享京供競共凶協叫境峡強恐恭挟教橋況狂狭矯胸脅興郷鏡響驚仰凝暁業局曲極玉僅勤均巾錦斤琴禁筋緊菌襟謹近金吟銀九句区苦駆駒具愚虞空偶遇隅串屈掘窟靴熊繰桑勲君薫訓群軍郡係傾刑兄啓型契形径恵慶憩掲携敬景渓稽系経継茎蛍計詣警軽鶏芸迎鯨劇撃激隙桁傑欠決潔穴結血月件倹健兼券剣圏堅嫌建憲懸拳検権犬献研絹県肩見謙賢軒遣鍵険顕験元原厳幻弦減源玄現舷言限個古呼固孤己庫弧戸故枯湖股虎誇雇顧鼓五互午呉娯後御悟碁語誤護乞交侯候光公功効勾厚口向后喉坑好孔孝工巧幸広康恒慌抗拘控攻更校梗構江洪港溝甲皇硬稿紅絞綱耕考肯航荒行衡講貢購郊酵鉱鋼降項香高剛号合拷豪克刻告国穀酷黒獄腰骨込頃今困墾婚恨懇昆根混痕紺魂佐唆左差査沙砂詐鎖座挫債催再最塞妻宰彩才採栽歳済災采砕祭斎細菜裁載際剤在材罪財坂阪咲崎埼作削搾昨柵策索錯桜冊刷察拶撮擦札殺雑皿三傘参山惨散桟産算蚕賛酸斬暫残仕伺使刺司史嗣四士始姉姿子市師志思指支施旨枝止死氏祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治璽磁示耳自辞鹿式識軸七叱執失嫉室湿漆疾質実芝舎写射捨赦斜煮社者謝車遮蛇邪借尺爵酌釈若寂弱主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹需囚収周宗就州修愁拾秀秋終習臭舟衆襲蹴週酬集醜住充十従柔汁渋獣縦重銃叔宿淑祝縮粛塾熟出術述俊春瞬准循旬殉準潤盾純巡遵順処初所暑庶緒署書諸助叙女序徐除傷償勝匠升召商唱奨宵将小少尚床彰承抄招掌昇昭晶松沼消渉焼焦照症省硝礁祥称章笑粧紹肖衝訟証詔詳象賞鐘障上丈乗冗剰城場壌嬢常情条浄状畳蒸譲醸錠嘱飾拭植殖織職色触食辱尻伸信侵唇娠寝審心慎振新森浸深申真神紳臣芯薪親診身辛進針震人仁刃尋甚尽腎迅陣須酢図吹垂帥推水炊睡粋衰遂酔随髄崇数枢据杉裾澄寸世瀬畝是凄制勢姓征性成政整星晴正清牲生盛精聖声製西誠誓請逝醒青静斉税隻席惜戚斥昔析石積籍績脊責赤跡切拙接摂折設窃節説雪絶舌仙先千占宣専川戦扇栓泉浅洗染潜煎旋線繊羨腺船薦詮践選遷銭鮮前善漸然全禅繕膳塑措曽狙疎礎祖租粗素組訴阻遡僧創双倉喪壮奏爽層想捜掃挿操早曹巣槽燥争痩相窓総草荘葬藻装走送遭霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖存孫尊損村遜他多太汰唾堕妥惰打駄体堆対耐帯待怠態戴替泰滞胎袋貸退逮隊代台大第題滝卓宅択拓沢濯託濁諾但達奪脱棚谷誰丹単嘆担探旦淡炭短端綻胆誕鍛団壇弾断暖段男談値知地恥池痴稚置致遅築畜竹蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷酎鋳駐著貯丁兆帳庁弔張彫徴懲挑朝潮町眺聴腸調超跳長頂鳥勅捗直朕沈珍賃鎮陳津墜椎追痛通塚漬潰坪爪釣鶴亭低停偵貞呈堤定帝底庭廷弟抵提程締艇訂諦逓邸泥摘敵滴的笛適溺哲徹撤迭鉄典填天展店添貼転点伝殿田電吐塗妬徒斗渡登賭途都努度土奴怒倒党冬凍刀唐塔島悼投搭東桃棟盗湯灯当痘等答筒糖統到藤討謄豆踏逃透陶頭騰闘働動同堂導憧洞瞳童胴道銅峠匿得徳特督篤毒独読栃凸突届屯豚頓曇鈍奈那内謎鍋縄南軟難二尼弐匂肉虹日乳入如尿任妊忍認寧猫熱年念捻燃粘悩濃納能脳農把覇波派破婆罵馬俳廃拝排敗杯背肺輩配倍培媒梅買売賠陪伯剥博拍泊白舶薄迫漠爆縛麦箱箸肌畑八鉢発髪伐罰抜閥伴判半反帆搬斑板氾汎版犯班畔繁般藩販範煩頒飯晩番盤蛮卑否妃彼悲扉批披比泌疲皮碑秘罷肥被費避非飛備尾微眉美鼻匹膝肘必筆姫媛百俵標氷漂票表評描病秒苗品浜貧賓頻敏瓶不付夫婦富布府怖扶敷普浮父符腐膚譜負賦赴阜附侮武舞部封風伏副復幅服福腹複覆払沸仏物分噴墳憤奮粉紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米壁癖別蔑偏変片編辺返遍便勉弁保舗捕歩補穂募墓慕暮母簿倣俸包報奉宝峰崩抱放方法泡砲縫胞芳蜂褒訪豊邦飽乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿防頬北僕墨撲朴牧睦勃没堀奔本翻凡盆摩磨魔麻埋妹昧枚毎幕膜枕又抹末繭万慢満漫味未魅岬密蜜脈妙民眠務夢無矛霧婿娘冥名命明盟迷銘鳴滅免綿面麺模茂妄毛猛盲網耗木黙目餅戻問紋門冶夜野弥矢厄役約薬訳躍柳愉油癒諭輸唯優勇友幽悠憂有湧猶由裕誘遊郵雄融夕予余与誉預幼妖容庸揚揺擁曜様洋溶用窯羊葉要謡踊陽養抑欲沃浴翌翼羅裸来頼雷絡落酪乱卵嵐欄濫藍覧利吏履梨理璃痢裏里離陸律率立略流留硫粒隆竜侶慮旅虜了僚両寮料涼猟療瞭糧良量陵領力緑倫厘林臨輪隣瑠塁涙累類令例冷励礼鈴隷零霊麗齢暦歴列劣烈裂廉恋練連錬呂炉賂路露労廊弄朗楼浪漏老郎六麓録論和話賄脇惑枠湾腕丼傲刹哺喩嗅嘲毀彙恣惧慄憬拉摯曖楷鬱璧瘍箋籠緻羞訃諧貪踪辣錮";

            //確認したい文字コード
            Encoding encoding = Encoding.GetEncoding(932);

            //文字とバイナリを比較出力
            for (int i = 0; i < kana.Length; i++)
            {
                string w = kana.Substring(i, 1);
                Console.WriteLine(w + "\t" + BitConverter.ToString(encoding.GetBytes(w)));
            }

            for (int i = 0; i < joyo_kanji.Length; i++)
            {
                string w = joyo_kanji.Substring(i, 1);
                Console.WriteLine(w + "\t" + BitConverter.ToString(encoding.GetBytes(w)));
            }
        }
    }
}
//ァ	83-40
//ア	83-41
//あ	82-A0
//ィ	83-42
//・・・

```