[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:29451] Re: KDEの文字化け(その2)



こじま@言ってみるものだなぁ,,です(笑

From: Naofumi Honda <honda@xxxxxxxxxxxxxxxxxxxxxx>
Subject: [plamo:29448] Re: KDEの文字化け(その2)
Date: Thu, 4 Dec 2008 13:52:42 +0900

> > > これって、fish(ssh)やftpもだめなのですね。これは嫌な感じですね。
> > > 添付のpatchでfishとftpはOKです(sambaは環境がないので不明).

> となっていて、unicode上位が切り捨てられている為でした。
> ここは、ushort -> unsigned intですね。これで直ります。

> あと、fishのslave processがしばしば落ることがあるのですが、
> これは落る必要のないSIGPOLLで落ちています。
> kdelibsのslavebase.cでSIGPOLLをsigignoreすればOKです。

添付のようなパッチにまとめてみました.SIGPOLL は,#define されていると
KDE_signal に登録されるようなので,とりあえず #undef してみました.

全部入れ変えるのは大変なので,とりあえず KDE 4.1.2 の環境に,kdelibs だ
けをパッチをあてた 4.1.3 にして試してみました.

> #これで当座のKDEの文字化けは全て解決では?たぶん(笑)

かなりいい感じで使えるようになったのですが,手もとではまだネットワーク
経由での dolphin の文字化けは残っているようです.もっとも,パッチ前のよ
うに UTF8 レベルで壊れるのではなく,ファイル名とかは EUC-JP になってい
るのだけど,表示の段階で文字コードが EUC-JP だと判断されずに英数字のま
ま表示されているような感じです.

同じ場所を konqueror で開いて,「ツール」=>「リモートの文字コードセット
を選択」で「日本語 EUC-JP」を選ぶと,以後は dolphin でその場所を再度開
いても正しく EUC-JP で表示してくれるので,文字コードの判別あたりの問題
だと思いますが,どうしたものかはさっぱり(苦笑

# まぁ,一度文字コードを判別させれば,以後は落ちずに使えるようになった
# ので,ずいぶん使い勝手はよくなりました :-)

それから,これはアプリレベルの問題なので直接開発者に連絡すべきだと思い
ますが,ファイルアーカイバーの Ark が,アーカイブ内の(Shift-JIS な)日本
語ファイル名を処理できないようです.

# こっちは UTF8 が壊れたような化け方をしているので,多分,ushort の問題
# だろうなぁ.

GNOME の書庫マネージャ(fileroller)とか Xfce の xarchiver は対応している
ので実用上は問題ないのですが,KDE だけで閉じるとちょっとツラい感じ.

# Windows の世界から届く zip ファイルとかは,たいてい中身のファイルも日
# 本語なんだよなぁ..

----------
こじま
diff -aru kdelibs-4.1.3/kdecore/io/kurl.cpp build/kdecore/io/kurl.cpp
--- kdelibs-4.1.3/kdecore/io/kurl.cpp	2008-10-30 22:24:12.000000000 +0900
+++ build/kdecore/io/kurl.cpp	2008-12-04 17:13:51.309706644 +0900
@@ -987,7 +987,7 @@
   QString result;
   for (int i = 0; i < input.length(); ++i) {
     QChar c = input.at(i);
-    register short u = c.unicode();
+    register unsigned int u = c.unicode();
     if (u < 0x20 || u == '?' || u == '#' || u == '%'
         || (u == ' ' && (i+1 == input.length() || input.at(i+1) == ' '))) {
       static const char hexdigits[] = "0123456789ABCDEF";
diff -aru kdelibs-4.1.3/kio/bookmarks/kbookmarkmanager.cc build/kio/bookmarks/kbookmarkmanager.cc
--- kdelibs-4.1.3/kio/bookmarks/kbookmarkmanager.cc	2008-07-08 18:54:18.000000000 +0900
+++ build/kio/bookmarks/kbookmarkmanager.cc	2008-11-20 13:10:15.511339413 +0900
@@ -396,9 +396,14 @@
     if ( file.open() )
     {
         file.simpleBackupFile( file.fileName(), QString(), ".bak" );
+#ifdef  __ORIGINAL_CODE__
         QTextStream stream(&file);
         stream << internalDocument().toString();
         stream.flush();
+#else
+        QByteArray cstr = internalDocument().toString().toUtf8();
+        file.write(cstr.data(), cstr.length());
+#endif
         if ( file.finalize() )
         {
             return true;
diff -aru kdelibs-4.1.3/kio/kio/kremoteencoding.cpp build/kio/kio/kremoteencoding.cpp
--- kdelibs-4.1.3/kio/kio/kremoteencoding.cpp	2008-05-21 20:20:15.000000000 +0900
+++ build/kio/kio/kremoteencoding.cpp	2008-12-04 17:11:49.857991649 +0900
@@ -28,7 +28,11 @@
 {
   public:
     KRemoteEncodingPrivate()
+#ifdef	ORIGINAL_CODE
       : m_codec(0)
+#else
+      : m_codec(QTextCodec::codecForLocale())
+#endif
     {
     }
 
@@ -104,7 +108,11 @@
   if (name)
     d->m_codec = QTextCodec::codecForName(name);
   else
+#ifdef	ORIGINAL_CODE
     d->m_codec = QTextCodec::codecForMib( 106 ); // fallback to UTF-8
+#else
+    d->m_codec = QTextCodec::codecForLocale(); // fallback to UTF-8
+#endif
 
   if (d->m_codec == 0)
     d->m_codec = QTextCodec::codecForMib(4 /* latin-1 */);
diff -aru kdelibs-4.1.3/kio/kio/slavebase.cpp build/kio/kio/slavebase.cpp
--- kdelibs-4.1.3/kio/kio/slavebase.cpp	2008-07-08 18:54:18.000000000 +0900
+++ build/kio/kio/slavebase.cpp	2008-12-04 17:26:30.809631632 +0900
@@ -184,6 +184,7 @@
         KDE_signal(SIGBUS,&sigsegv_handler);
         KDE_signal(SIGALRM,&sigsegv_handler);
         KDE_signal(SIGFPE,&sigsegv_handler);
+#undef SIGPOLL
 #ifdef SIGPOLL
         KDE_signal(SIGPOLL, &sigsegv_handler);
 #endif
@@ -239,7 +240,11 @@
     d->timeout = 0;
     connectSlave(QFile::decodeName(app_socket));
 
+#ifdef	ORIGINAL_CODE
     d->remotefile = 0;
+#else
+    d->remotefile = new KRemoteEncoding( 0 );
+#endif
     d->inOpenLoop = false;
     d->exit_loop = false;
 }
@@ -1027,7 +1032,11 @@
         KSocks::setConfig(d->configGroup);
 #endif
         delete d->remotefile;
+#ifdef	ORIGINAL_CODE
         d->remotefile = 0;
+#else
+	d->remotefile = new KRemoteEncoding( 0 );
+#endif
     } break;
     case CMD_GET: {
         stream >> url;

Follow-Ups
[plamo:29452] Re: KDEの文字化け(その2), Naofumi Honda
References
[plamo:29448] Re: KDEの文字化け(その2), Naofumi Honda

[検索ページ] [メール一覧]
Plamo ML 公開システム