非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

C#: テキストファイルの文字コードを判別する方法(1)

      2016/06/11

広告

 

以前、テキストエディタを作った際に、テキストファイルの日本語文字コードがShift-JISなのかEUCなのかUTF-8なのか自動で判別する必要があり、その解析にかなり労力を割いたので、忘れないように残しておきます。どのような考えから解析に至ったかまで書くので何回かに分けます。今回は1回目。

次の表が文字に対する各文字コードのバイトコードです。16進数のところを見てわかるようにパッと見違いがわかります。

ポイントは先頭コードの違いにあります。すべての文字の先頭コードだけを比べてみると、
 Shift-JIS:   130~152
 EUC:         161~207
 UTF-8:      194~239
となります。

そうすると、Shift-JISとEUCは明確に切り分けできることがわかります。問題なのはUTF-8なのですが、この文字コードは、2バイト文字と3バイト文字の2種類があって、よく使う全角英数字や日本語かな、漢字は3バイト文字となり、先頭コードは227~239となり、Shift-JISやEUCとダブルことはないようです。悩ましいのは記号などで、たとえば”±”という記号は、194と177の2バイトで先頭コードがEUCとダブります。

ダブっているのは以下の文字。お互い同じ先頭コードを持っています。結論を言えばこの文字は判別できません。世に出回っているテキストエディタもこれらの文字の判別は諦めているようです。もっともこの文字のみで構成されているテキストなんてほとんどゼロに近く、何かしらの「それ以外の文字」が入っている(だろう)と思って諦めるしかないでしょう。
【EUC_JP】
蔵, 贈, 則, 即, 測, 属, 賊, 卒, 其, 歎, 痢, 裡, 里, 離, 陸, 律, 率, 立, 留, 硫, 粒, 隆, 竜, 龍, 侶, 慮, 旅, 虜, 了, 亮, 僚, 両, 凌
【UTF-8】
¢, £, §, ¨, ¬, °, ±, ´, ¶, ÷, Ρ, Σ, Τ, Υ, Φ, Χ, Ψ, Ω, α, β, γ, δ, ε, ζ, η, θ, ι, κ, λ, μ, ν, ξ, ο

本日はここまで。

【次のエントリー】
C#: テキストファイルの文字コードを判別する方法(2) テキストファイルをバイト型配列に読み込む

 
広告

 - C#応用編