加藤(大阪)です。 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/