職場では、エンコーディング関連の接続、災害、または大災害がなければ、1週間も経たないようです。この問題は通常、エンコーディングを指定せずに「テキスト」ファイルを確実に処理できると考えるプログラマーから生じます。しかし、それはできません。
したがって、今後、ファイルの末尾が*.txt
またはで終わる名前をファイルに付けることを禁止することが決定されました*.text
。その考えは、これらの拡張機能により、カジュアルなプログラマーをエンコードに関する鈍い自己満足に導き、これが不適切な処理につながるということです。少なくともあなたが知っているので、それは全く拡張を持たない方がほぼ良いでしょうあなたは、あなたが持っているかわからないということ。
しかし、私たちはそれほど遠くに行くことを望んでいません。代わりに、エンコーディングで終わるファイル名を使用することが期待されます。たとえばテキストファイルの場合、これらは次のようREADME.ascii
になります。README.latin1
、README.utf8
など、
特定の拡張子が必要なファイルの場合、PerlやPythonなど、ファイル自体の内部でエンコーディングを指定できる場合は、それを行う必要があります。そのような機能がファイルの内部に存在しないJavaソースのようなファイルの場合、次のように、エンコーディングを拡張の前に置きます。SomeClass-utf8.java
。
出力の場合、UTF-8は 強く推奨されます。
しかし、入力のために、コードベースの何千ものファイルをどのように処理するかを理解する必要があります。 *.txt
。すべての名前を変更して、新しい標準に合わせたいと思います。しかし、それらすべてを目にすることはできません。したがって、実際に機能するライブラリまたはプログラムが必要です。
これらは、ASCII、ISO-8859-1、UTF-8、Microsoft CP1252、またはApple MacRomanでさまざまです。何かがASCIIであるかどうかを判断できることはわかっていますが、何かがおそらくUTF-8であるかどうかを知ることには大きな変化がありますが、8ビットのエンコーディングに困惑しています。ほとんどのデスクトップがMacであるUnix混合環境(Solaris、Linux、Darwin)で実行しているため、迷惑なMacRomanファイルがかなりあります。そして、これらは特に問題です。
しばらくの間、私はプログラムでどれを決定する方法を探していました
- ASCII
- ISO-8859-1
- CP1252
- マクロマン
- UTF-8
ファイルがあり、3つの異なる8ビットエンコーディングを確実に区別できるプログラムまたはライブラリが見つかりません。おそらく、1,000以上のMacRomanファイルだけが存在するため、私たちが使用する文字セット検出器は、それらを探知できなければなりません。私が見たものは何もトリックを管理できません。ICU文字セット検出器ライブラリに大きな期待がありましたに MacRomanを処理できません。また、PerlとPythonの両方で同じ種類のことを行うためのモジュールも調べましたが、何度も繰り返しますが、MacRomanの検出はサポートされていません。
したがって、私が探しているのは、ファイルが5つのエンコーディングのどれにあるか、できればそれより多いかを確実に判断する既存のライブラリまたはプログラムです。特に、私が引用した3つの3ビットエンコーディング、特にMacRomanを区別する必要があります。ファイルは99%以上の英語のテキストです。他の言語にはいくつかありますが、多くはありません。
ライブラリコードの場合、言語設定は、Perl、C、Java、またはPythonの順で、それが単なるプログラムである場合、完全なソースで提供され、Unixで実行され、完全に邪魔にならない限り、その言語がどの言語であるかは特に問題になりません。
他の誰かがランダムにエンコードされた膨大な数のレガシーテキストファイルのこの問題を抱えていましたか?もしそうなら、それをどのように解決しようとしましたか、そしてどれほど成功しましたか?これは私の質問の最も重要な側面ですが、プログラマーにファイルの実際のエンコーディングを使用してファイルに名前を付ける(または名前を変更する)ように勧めることで、将来の問題を回避するのに役立つかどうかにも興味があります。制度的にこれを施行しようとした人はいますか?その場合、それは成功したかどうか、そしてなぜですか?
そして、はい、問題の性質上、明確な答えを保証できない理由を完全に理解しています。これは特に、続行するのに十分なデータがない小さなファイルの場合に当てはまります。幸い、私たちのファイルはめったに小さくありません。ランダムREADME
ファイルを除いて、ほとんどのファイルは50kから250kのサイズ範囲にあり、多くはより大きなサイズです。サイズが数Kを超えるものはすべて、英語であることが保証されています。
問題ドメインは生物医学のテキストマイニングであるため、PubMedCentralのすべてのオープンアクセスリポジトリのように、大規模で非常に大規模なコーパスを扱う場合があります。かなり巨大なファイルは5.7ギガバイトのBioThesaurus 6.0です。このファイルはほとんどすべてUTF-8であるため、特に煩わしいものです。しかし、一部の麻痺した頭蓋骨は、8ビットエンコーディングであるMicrosoft CP1252のいくつかの行に行き詰まりました。あなたがそれをトリップするまでにはかなり時間がかかります。:(