加藤(大阪)です。
Thu, 19 Dec 2002 00:58:08 +0900 付
Masaki SHINOMIYA <shino@xxxxxx> さんのメールより:
> シノバーです
> ・・・・・・
> xml-io.c の該当部分は
> xml_parser_flag = xmlUseNewParser (TRUE);
> while ((bytes = gzread (f, buffer, XML_INPUT_BUFFER_SIZE)) > 0) {
> xmlParseChunk (pctxt, buffer, bytes, 0);
> value_io_progress_update (context, lseek (fd, 0, SEEK_CUR));
> }
> xmlParseChunk (pctxt, buffer, 0, 1);
> xmlUseNewParser (xml_parser_flag);
>
> - 第1行目で新parserを使うようセット
> - 次に.gnumericファイルを1行ずつ読んで
> - libxmlのxmlParseChunkに渡して一括任せているようです。
> - ファイルを全て読み終わるとxmlParseChunkを閉じ
> - parserをデフォルト(旧)に戻して終わり。
1行ずつ、ではなく XML_INPUT_BUFFER_SIZE (#define XML_INPUT_BUFFER_SIZE 4096)
ずつ読んで(市川さんの予測された通りのバッファサイズですね)、のようですが、
そんな感じなんですね。
シノバーさんの言われていた「環境変数で新parserの使用を・・・」と言うのは、
parser.c の
void
xmlInitParser(void) {
if (xmlParserInitialized) return;
/* make this user selectable */
xmlUseNewParserDefault = 0;
if (getenv("LIBXML_USE_NEW_PARSER"))
xmlUseNewParserDefault = 1;
else if (getenv("LIBXML_USE_OLD_PARSER"))
xmlUseNewParserDefault = 0;
この部分の事ですね。
で、
int
xmlParseDocument(xmlParserCtxtPtr ctxt) {
xmlChar start[4];
xmlCharEncoding enc;
xmlInitParser();
if (!xmlUseNewParserDefault)
return(xmlOldParseDocument(ctxt));
ここで、新旧どちらのエンコード方式を使うかの切り替えをしてるようですね。
本題からは外れますが、人様の書かれたソースを読む機会はあまり無かったので、
御蔭様で大変ワクワクしています。有り難うございます。
> > > gnumeric側で受け取った上位バイトを落すという
> のは上記を見ると現実的ではないですね。あと考えられるのは、
> new_parserを通したあとで UTF-8→ISO-8869-1 への逆変換をやる。
> 理論的には可能です。
> しかし時代逆行だから、gnumeric本家は全くやる気はないみたいです。
> gnumeric-1.1.xはlibxml2を使ってUTF-8ベースみたいですから。
いずれ gnumeric-1.1.x に移行するとしたら、その時は表示、入力系も UTF-8
に行ってる事が考えられるでしょうし、今逆変換の方法を探っても…、と言うこと
ですね。
> どうなんでしょう? MS-WordはUTF-8ベースだと聞きましたから
> 日本語UTF-8というのは可能なんでしょうが、
> euc-jpやS?JIS(cp932)との相互変換は難しいとの話もありますし。
そうなんですか。では、現在作ってる大切なデータに関しては、csv でもセーブ
して置き、やがて登場するかもしれない nkf の UFT-8 対応版に期待、ぐらいしか
無いですか・・・
> gnumeric-1.1.xで日本語が使えるのか?という問いに対しては、
> そもそもUTF-8で日本語が使える環境があるのか?ということになりますね。
> Kondara 2.0でダメならどうにも…。
この件は、誤解されるような言い方をしてしまったようです。
Kondara 2.0 では UFT-8 が正常にあつかえなかった、と言う意味ではなく、euc-jp な
環境設定で UTF-8 コードを表示させた為、例の Â が、1バイト文字として
ナマで表示されてしまっていたのではないか、と言う事が言いたかったので・・・。
「現段階では一般向けでは無い」と言うことだったと記憶していますが、UFT-8 で使う
為の様々な用意はなされていたようです。(別途ダウンロードが必須だったので、今と
なってはどんなものだったのか、確かめる事は出来ませんが)
---
加藤 雅 <mkato@xxxxxxxxxxxxx>
http://isweb15.infoseek.co.jp/diary/add10/rox/