vine-users ML アーカイブ



[vine-users:057052] Re: gnumeric xml 保存時の日本語 文字化け及び脱落

  • From: 加藤 雅 <mkato@xxxxxxxxxxxxx>
  • Subject: [vine-users:057052] Re: gnumeric xml 保存時の日本語 文字化け及び脱落
  • Date: Thu, 19 Dec 2002 22:13:47 +0900
加藤(大阪)です。

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 コードを表示させた為、例の &#194 が、1バイト文字として
ナマで表示されてしまっていたのではないか、と言う事が言いたかったので・・・。

「現段階では一般向けでは無い」と言うことだったと記憶していますが、UFT-8 で使う
為の様々な用意はなされていたようです。(別途ダウンロードが必須だったので、今と
なってはどんなものだったのか、確かめる事は出来ませんが)

--- 
加藤 雅 <mkato@xxxxxxxxxxxxx>
	http://isweb15.infoseek.co.jp/diary/add10/rox/