【有志】P2P文字化け対策委員会【募集】

このエントリーをはてなブックマークに追加
1委員会下っ端:02/11/26 23:23 ID:MH9Z8XsK
Xnap、Lime、myster、RedLightなどのJAVAなP2Pソフトの文字化けを
直すべくがんがる為のスレ

ダイナミックコンポジッションの仕様から生まれる問題で、
日本のJava開発者とともに対応策練らないといけません。
対策をしっかりした上で、開発者に連絡しないといけません。
協力者を切に募集します。
2名称未設定:02/11/26 23:24 ID:MH9Z8XsK
=======xnapスレより 履歴=======
586 :文字化け対策有志募集 :02/11/25 23:49
文字化けコード変換表を手分けして作りませんか。
やり方は以下の通りです。
テキストエディット
ば=は゛
び=ひ゛
完成したらUTF-8エンコーディングで保存
プログラマでなくとも参加できます。

590 :名称未設定 :02/11/26 10:49
ありがとうございます。
できるだけ完全な対応表を作りたいので、記号等も含まれます。
実際にXNapで化ける恐れのあるファイル名を共有しながら
相互に確認しあうことも必要かと思います。
XNapの開発者に送るだけでは不十分で、英文で不具合の詳細と、
変換表の利用方法を詳しく説明できなければなりません。
この掲示板を利用して話し合って変換方法を決めませんか

594 :文字組 :02/11/26 18:34
一気に斜め読みしたので、外していたらゴメンナサイm(_ _)m
正規表現で置換できるツールなら一度に分解することができるのでは?
下記は、正規表現での置換コマンドです。こんなんではダメですか?
後半の半角文字にする部分は不要かも知れませんが…
# 濁点、半濁点付きの文字を分解しておく
s/\([ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ]\)/\1゛/g
s/\([パピプペポ]\)/\1゜/g
3名称未設定:02/11/26 23:25 ID:MH9Z8XsK
596 :名称未設定 :02/11/26 18:46
当方Javaプログラムの知識は皆無でその書式がどういった働きをするのか想像できませんが、
これは、一番シンプルに変換できるいい方法なのですね。
できれば、変換処理用のソースコードのサンプルを上げていただけないでしょうか。
宜しくお願いします。

599 :文字組 :02/11/26 19:00
>>596
>>594 で上げたサンプル(事例)は、SEDと呼ばれるツールに添付
される変換フィルタの抜粋です。古いソフトなので所在は今判りま
せんが、下記にドキュメント(抜粋)を転載します。私自身はプロ
グラミングの知識はありませんので、ソースファイル云々について
は???です。ゴメンナサイ。
-- 以下、転載 --
●移植性
このツールは、BSD 4.1のUNIX上のsedから設計したもので、(作者の知識
の範囲とテストから決定したところによれば)UNIX BSD 4.1とコンパチブル
です。さらに、ドキュメントに記述されている点はすべてサポートしていま
す。
(中略)
●ノート
これはGNUオペレーティングシステムのフリーウェアです。これによってユ
ーザーは、以下の条件に従って、使用・改造・コピー・配布することができ
ます。
1.各ソースファイルにある作者の注意書き等を変更したり削除した
りしてはならない。
2.ソースなしでオブジェクトだけを配布してはならない。
(中略)
●参考
ed(1), grep(1), awk(1), lex(1), regexp(5)
4名称未設定:02/11/26 23:26 ID:MH9Z8XsK
600 :名称未設定 :02/11/26 19:08
>>599
ありがとうございました。
検索してみたところSEDは外部プログラムのようですね。
これですと残念ながらJavaのXNapには適応できなさそうです。

603 :文字組 :02/11/26 19:53
>>600
的を外していたらゴメンナサイ。CGIなどで利用される“Perl”などで
も正規表現はできますが、Javaの実行環境では、Perlなども外部
プログラムに相当するのですか?
…とすると、私の理解を超えてしまいます (^^;

604 :文字化け対策 :02/11/26 20:01
先ほどは失礼しました。
ご紹介になられたソフトは、変換表を吐き出すものなのでしょうか。
そうだとすれば、JavaだとかPerlだとかは関係ないですよね;;

605 :文字化け対策 :02/11/26 20:03
いま、思い出しました!ファイルローグ!
もしかしてこれのソースが見れれば幸せになれるかもです。
どなたかご存じありませんか。
5名称未設定:02/11/26 23:31 ID:MH9Z8XsK
609 名前:名称未設定 投稿日:02/11/26 23:02 ID:tDs6aEfl
具体案その2

三バイトの文字を見つけたら、例の変換表に照らし合わせて2バイト文字として扱う機能
(ロケールと言語が日本語の場合)

610 名前:名称未設定 投稿日:02/11/26 23:04 ID:tDs6aEfl
具体案その3

具体案その2の機能をアップルスクリプトやら、簡単なプログラムやらを組んで実現する

611 名前:名称未設定 投稿日:02/11/26 23:07 ID:tDs6aEfl
具体案その4

ファイルローグに使われていた文字コード処理を利用する
6名称未設定:02/11/26 23:42 ID:tDs6aEfl
Javaではcharという組込み型が用意されており、
ここにはUnicodeが格納されることになっています。
一般的には日本語など漢字を使う言語であっても
Unicodeの1つのコードは1文字に対応するということになっており、
その前提が正しいとするとcharにはキャラクタが格納されることになります。
文字を表すデータ型を言語仕様でサポートするということは、
テキスト処理を行ううえで非常に便利であるに違いありません。
7名称未設定:02/11/26 23:43 ID:tDs6aEfl
しかしこの問題をもう少し詳細に見てみると見ると状況はかなり変ってきます。
というのはUnicodeではダイナミックコンポジッション(dynamic composition)
という複数のコードで1つの文字を構成することが仕様として許されているからです。
そしてこのダイナミックコンポジッションは例外的な機能ではなく、
ヨーロッパ系の言語、インド系の言語では頻繁に用いられるものになっています。
また日本語であってもジェネラルパンクチュエーション(general punctuation)
という仕様によりダイナミックコンポジションとは無関係というわけでは
なくなっているのが頭の痛いところです。
8名称未設定:02/11/26 23:43 ID:tDs6aEfl
ダイナミックコンポジッションの存在により、もともとのJavaの設計上の
ポイントだったはずであるchar=Unicode=文字という単純化は、
グローバルアプリケーションでは通用しなくなっています。
charに格納できるのはあくまでもUnicodeのコードであり、これは文字の部品にすぎないのです。
char=Unicodeではあるのですが、Unicode=文字でない以上char=文字ではないということです。
つまりグローバルアプリケーションでは文字は
charの配列またはStringに格納された複数のUnicodeとして扱うことになります。
9名称未設定:02/11/26 23:44 ID:tDs6aEfl
以下のプログラムはStringから文字を一文字づつ取出しdoSomethingメソッドに渡す処理です。
国際化バージョンでは文字がStringに格納されるようになっていることに注目して下さい。
Unicodeのダイナミックコンポジッションに対応するためにはこのようにするしかありません。

public static void doSomethingPerCharacter(String string) {
 BreakIterator boundary = BreakIterator.getCharacterInstance();
 boundary.setText(string);
 int start = boundary.first();
 for (int end = boundary.next(); end != BreakIterator.DONE;
  start = end, end = boundary.next()) {
  String c = String.substring(start, end);
  doSomething(c);
 }
}
10名称未設定:02/11/26 23:44 ID:tDs6aEfl
日本語の場合

残念ながら日本語のフォントにもジェネラルパンクチュエーションが許されているものがあるため、
日本語の範囲でもchar=Unicode=文字ではありません。
たとえば'は'+濁点='ば'や'ひ'+'。'='ぴ'が日本語コードのジェネラルパンクチュエーションの例です。
現時点ではあまりシビアに考える必要はないと思いますが、
厳密には日本語だけを使用するアプリケーションであっても前述の国際化の意識が必要であるということです。
11名称未設定:02/11/26 23:45 ID:MH9Z8XsK
専門的知識は私のようなシロートにはサパーリです。
素人が協力できることって何ですか?

ファイルローグを拾ってくるのは役に立ちます?
12名称未設定:02/11/26 23:49 ID:tDs6aEfl
295 :名称未設定 :02/11/23 01:29 ID:atUlz5Hl
何度インスコしても日本語にならないのですが。

298 :名称未設定 :02/11/23 14:00 ID:pwD8364i
シフテムフォルダ -> 初期設定 -> limewire -> limewire.props

COUNTRY=jp
LANGUAGE=ja

310 :名称未設定 :02/11/24 00:59 ID:Fp9yGF4u
>>309
例えばだけど、
http://www.vector.co.jp/soft/mac/util/se139948.html
をDLして[limewire.props]をテキストエディタで開けばいい。

SimpleTextだと改行なしでゴチャゴチャ見えるから、iTextなど持ってたら
そっちで開くとより見やすいだろう。

漏れの場合、「LANGUAGE=ja」ではあったがCOUNTRYの方は
「COUNTRY=」で改行されてて未定義(?)だったので、ちょっと不思議。
こっちをjpにしたら、もっと幸せになれるかしら。
(当方0S9.2.2でLime2.7.3、日本語化されてまつ)
13名称未設定:02/11/26 23:51 ID:tDs6aEfl
366 :XNap 文字化け対策 :02/11/26 07:23 ID:tDs6aEfl
UNICODEのファイル名をJavaで引っこ抜くと、濁点のついた文字等が
3バイトコードになってしまうのですが、2バイトコードとして扱うには
どういった仕組みが必要になりますか。

宜しくご教授お願いいたします。


がぎぐげご -> か゛き゛く゛け゛こ゛

367 :名無しさん :02/11/26 21:42 ID:bS2KvpL1
>>366
文字化けしてるわけではない。UNICODEの仕様の一つです。
UNICODEをUNICODEのまま利用しない方がよいかもしれない。。

368 :名称未設定 :02/11/26 21:52 ID:tDs6aEfl
MacOS X のファイルフォーマットはUNICODEですよね。
それをJavaで取り込んだり、Swingのファイル選択のダイアログでみると
既に三バイト文字になっています。。。
これをShift-JISの文字列としてそのまま利用してしまうと2バイトと3バイトの差が出来て
不整合になってしまいます。

この二つを同期させたいのですが、、、

369 :名称未設定 :02/11/26 22:49 ID:dgStSSQa
Javaは内部処理はUNICODEなんだから、
出力時にsjisとして吐き出せばよい。
14親切な人:02/11/26 23:52 ID:3OBganvf

ヤフーオークションで、凄い人気商品、発見!!!

プランテック製の「 RX-2000V 」を改造済み
にした、アイティーエス製の「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/neo_uuronntya#.2ch.net/

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。

ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h5.dion.ne.jp/~gekitoku/#.2ch.net/
15名称未設定:02/11/26 23:52 ID:tDs6aEfl
370 :名称未設定 :02/11/26 23:18 ID:tDs6aEfl
それだとローカル上ではファイルの入出力等、問題になりませんが
XNapはネットワークを通じてファイル名がISO-8859-1のエンコードとしてやり取りされています。
その際にJava内部のUNICODEの3バイトコードをISO-8859-1に変換すると
日本語の濁点が?になってしまうのです。

371 :名称未設定 :02/11/26 23:20 ID:tDs6aEfl
できるだけXNapのネットワークに文字を送信する前にShift-JISの2バイトコードに整えておく方法はありますでしょうか。
16名称未設定:02/11/26 23:54 ID:tDs6aEfl
207 :デフォルトの名無しさん :02/11/26 06:40
>>206
自力で置換。
211 :デフォルトの名無しさん :02/11/26 08:52
>>210
3バイトコードを2バイトコードに変換したいのです。
どいうったアルゴリズムをとれば問題を回避できるか、、、

212 :デフォルトの名無しさん :02/11/26 12:18
行きは、UNICODEのファイル名をJavaで認識する際に
1文字ずつ区切って取り出す処理をかまして、バイトコードの長さを見る
そこで3バイトの長さのものだけを変換テーブルの処理にかける
そろった文字列をストリングに格納してISO-8859-1のバイトデーターとして
クライアントに送信するのはどうでしょうか。
帰りは、ISO-8859-1の生をそのまま表示(Shift-JIS表示)で
文字列をそのままUNICODEに照らし合わせれば、サーバーのファイル名と一致する、、、
はたしてそうなるでしょうか、、、
変換テーブルという処理がツギハギ的であまり美しくないということも。

すべて妄想の域をでません。どなたか助け舟を宜しくお願いします。
17名称未設定:02/11/26 23:58 ID:tDs6aEfl
>>11
是非!
18名称未設定:02/11/27 00:00 ID:qwpmiyfg
スレタイにもJavaって入れた方が良かったんじゃない?
19名称未設定:02/11/27 00:52 ID:yTA3XKKU
372 名前:名称未設定 :02/11/27 00:20 ID:cElw1BJC
>>370-371
どうやってエンコードを変更しているのか分からないんだが、
OutputStreamWriter 使っても駄目だったってこと?

373 名前:名称未設定 :02/11/27 00:28 ID:yTA3XKKU
>>372

ソース内をOutputStreamWriterで検索してみましたが
XNapにはその構文は使われていませんでした。
実際にはどこの部分で使えばいいのでしょうか。

ソース
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/xnap/xnap2/xnap/

374 名前:名称未設定 :02/11/27 00:35 ID:SI+pZB1m
気になったので、調べてみた。

これが、ファイル名「がぎぐげご」をJavaで拾った時の文字コード
304b 3099 304d 3099 304f 3099 3051 3099 3053 3099

これは、Shift_JISのファイルに「がぎぐげご」と書いて、
それをJavaでUNICODEに変換かけた時の文字コード
304c 304e 3050 3052 3054

問題を解消するためには、コードを一つずつ調べて、
変換してやるしかないのでは。
例えば、304b 3099という文字を、304cに変換してやれば、
「か゛」ではなく、「が」になる。
20名称未設定:02/11/27 02:35 ID:0mwBv2I1
>>17
久しぶりに目標に向かって探してみたけど、なかった(´・ω・`)ガッカリ・・・
ファイルサーチでもHL鯖でも見当たらず。

HLやってる方、行きつけの鯖にて探してくれると嬉しいです。
21名称未設定:02/11/27 11:02 ID:yTA3XKKU
>>20

ファイルローグなかなか見つかりません。
いかなりレアな代物になっていたんですね。(汗
22名称未設定:02/11/28 01:12 ID:l2FclJFD
結局素人でも出来そうなのってファイルローグ見つけることだけ?
23名称未設定:02/11/28 02:55 ID:trAUIcv+
>>22
どのファイル名が文字化けするか調べてもらえますか。
特に記号類
24///lω・`):02/11/28 09:25 ID:jsDz8X3Z
素人ですいませんけど、下記のページとか参考になりますか?。

ttp://osakattf.hp.infoseek.co.jp/

ベクターを見ていたら、こんなソフトを見つけました。

ttp://www.vector.co.jp/soft/mac/util/se133334.html

よけいな事だったら、ゆるしてちょ・・・
25名称未設定:02/11/28 11:05 ID:trAUIcv+
26名称未設定:02/11/28 15:37 ID:HUoBw95/
あの、マイスターにも対応するんですか?
もう必要無いかと思いますが..
27名称未設定:02/11/28 17:11 ID:trAUIcv+
public static String margeDakuten(String text){
  if(text.length() == 0) return text;
  StringBuffer buffer = new StringBuffer(text.length());
  char pre;
  for(int i=0; i<text.length(); i++)
    char ch = text.charAt(i);
    if(ch != 0){
      if(ch == '゛'){
        buffer.append((char)(pre + 1));
      } else if(ch == '゜'){
        buffer.append((char)(pre + 2));
      } else {
        buffer.append(pre);
      }
    }
    pre = ch;
  }
  buffer.append(pre);
  return buffer.toString();
}

このパッチは濁点と半濁点の二バイト文字が含まれていた場合に
濁点半濁点の文字を削除し、一文字目のバイトコードの値を書き換えるものです。
28名称未設定:02/11/28 17:51 ID:kgCIzfmr
29名称未設定:02/11/29 02:10 ID:Q5QaGzQ/
>>28 参考にさせていただきます。

だいぶ進んできました。
皆さんありがとうございます。
一時的にファイルローグのソースの募集と、変換リストの作成を中断させていただきます。
30名称未設定
短命なスレでした

//*終了*//