2012年12月23日日曜日

KyoroText で使用されている技術 その5


[課題] 文字コードを自動認識させる。 


KyoroTexでは、テキストデータを表示/編集するためのツールです。 このテキストデータの扱いの難しところとして、「どの言語」なのか、「どのPFで書かれた」ものか、「どのようなツール」で書かれたデータなのかによって、データ構成が異なります。
例えば、「EUCJP」というルールに従うと、「あ」は 0xA4A2 で表せますが、「SJIS」というルールだと、0x82A0 であらわせます。 


テキストデーターを適切に読み込むには、どのようなルールで書かれたテキストデータなのかを、前もって知っている必要があります。 

しかし、テキストデータには、どのルールで書かれたものなのかが記載されていません。
KyoroTextで、どのようにしてこのルールを判定しているのかを説明します。 


[判定方法] 


  結論から書くと、jcharsetというライブラリを使用しています。「使っていますよ!」 だけだと物足りないので、文字コード(ルール)の判定する仕組みについて、さわりだけ説明します。 

文字コードの判定方法として、以下のような方法が考えられます。 
- a. テキストデータが、特定の文字コードのルールに沿ったものか確認する。 
- b. テキストデータに、含まれるバイトデータの出現率から、適当な文字コードを推測する。 
- c. テキストデータの、テキストの並びの出現率から、適当な文字コードを推測する。 
と行ったものです。 

例えば、日本語だと、改行のまえに、「。」があったり、英語表記と比較して、半角のスペースが少なかったりする。 ISO2022系の文字コードだと、文字の切り替えにESCが使用されると行った特徴を上手く利用して判定するのです。 


KyoroTextでは、自前でこれらの判定モジュールを作成することはあきらめました。  

KyoroTextで使用しているのは、Mozillaで使用されているchardatのJava版です。 


[参考] 
jchardatのPSMについて解説できたらなと考えていたのですが、PSM(Parallel State Machine)の部分が上手く理解できなかったので、あきらめました。 

もっとjchardatを知りたい方は、以下のページなどを参照してみてください。 

- http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html 
- http://jchardet.sourceforge.net/ 


[次回]
KyoroTextはでっかいデータをノータイムで表示できる事を実現したアプリです。
なので、KyoroTextで編集するデータはヒープに収まらないデータとなります。

メモリーに収まらないデータの一部を編集したい場合、どうすればよいでしょうか?
次回はKyoroTextで実現した解決方法について紹介します。


0 件のコメント:

コメントを投稿

mbedtls dart の 開発を始めた web wasm ffi io flutter

C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter  でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...