[課題] 文字コードを自動認識させる。 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で実現した解決方法について紹介します。
2012年12月23日日曜日
KyoroText で使用されている技術 その5
登録:
コメントの投稿 (Atom)
mbedtls dart の 開発を始めた web wasm ffi io flutter
C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...
-
[課題] Low Memory Killer を意図的に発生させたい Androidには、ヒープが涸渇すると使われていないアプリをKillする機能があります。 この記事では、意図的にヒープを枯渇させて、この状態をつくる方法について説明します。 単純にヒープを大...
-
UPnPを用いて、NAT越えできました。しかし、ルータがUPnPをサポートしていなかったり。UPnPだけでは越えられないNATがあります。 本文では、その代案として前回解説できなかった。「適当なサーバーに接続してみて、相手から見えているアドレスを返してもらう方法」について解...
-
Dart の Native Extensions を利用して、 SDL を用いたマルチプラットフォームのゲーム開発環境を作れるか検証してみた。 結論からいくと、 「Mac 上で動作する SDL x Dart の アプリは動作させることが難しいよ」 と言うことです。 Wind...
0 件のコメント:
コメントを投稿