感恩!
FileZilla官方是否尚未將 Unicode 釋出?
網站上似乎還沒有看到
twu2 寫:今天再改了一下 gftp.
1. 如果 ftp server 使用 utf-8, 則不管 gftp 使用 big5 或 utf-8 都可以正常看到中文.
2. 如果 ftp server 使用 big5, 則在 remote_charsets 中有設定 big5 的話, 也可以正常看到中文.
3. 在指令的部份, dir 或 get 都可以輸入中文字當參數.
4. 不管 gftp 在什麼環境下執行, big5 or utf-8 or 其它, 所有 local 端的檔名, 都會使用 utf-8 處理.
也就是說, 如果你不是在 utf-8 的環境下頭的話, 最好不要用這個版本. 以免在 local 找不到 big5 的中文檔名, 抓回來的中文檔名也變成 utf-8 編碼.
我試過 gftp-text/gftp-gtk 兩個版本, 都可以正常使用. 只是有些傳送的訊息, 可能會出現 big5 碼, 會有轉碼失敗的錯誤訊息, 應該不會影響正常使用.
Tetralet 寫:請問是否只有 filezilla 的 patch 進入 cvs 中,
而 gftp 並沒有呢?
Tetralet 寫:twu2 寫:還有一個小問題是在 unicode build 的版本上頭, 檔案列表還是會先由 utf-8 -> unicode -> ansi -> unicode. 可能有些多國語言的文字會轉失敗. 所以我今天早上給了作者另外一個小 patch 修正這個問題.
為什麼要轉換那麼多次呢?
Tetralet 寫:請問,Unicode 的版本是不是用於 MS Windows 2000/XP/2003 下的;
而非 Unicode 的版本是不是用於 MS Windows 95/98/ME 下的呢?
chinson 寫:FileZilla官方是否尚未將 Unicode 釋出?
網站上似乎還沒有看到
Tetralet 寫:我們可以在任何的 Locale 下使用類似 LC_ALL=zh_TW.Big5 gftp 來啟動 gftp,
這樣子在瀏覽中文的 ftp 的網站時基本上是沒有問題的。
問題只有出在上、下傳檔案時,
因為在本機上我們用的全是 UTF-8 編碼的,
所以我們想讓 gftp 在期間能進行 UTF-8 <-> Big5 的轉換動作。
我是想,
我們可以設定一個 gftp 專用的 LC_CODE=zh_TW.UTF-8 之類的環境變數,
而 gftp 可以據此來進行轉碼的動作,
(即 LC_CTYPE <-> LC_CODE 間的轉換)
twu2 寫:我原本考慮用 LC_CTYPE 的設定. 不過.... 後來沒打送把 patch 丟給 作者 (因為問題沒完全解決), 所以就不改了, 直接改用 UTF-8.... 因為我的需求就只有這樣.
diff -Nur winscp.orig\core\SessionData.cpp winscp.patch\core\SessionData.cpp
--- winscp.orig\core\SessionData.cpp Tue Feb 08 17:02:06 2005
+++ winscp.patch\core\SessionData.cpp Tue Mar 01 16:12:34 2005
@@ -498,6 +498,7 @@
READ_SFTP_BUG(Symlink);
READ_SFTP_BUG(Utf);
READ_SFTP_BUG(SignedTS);
+ READ_SFTP_BUG(ForceUtf);
#undef READ_SFTP_BUG
SFTPMaxVersion = Storage->ReadInteger("SFTPMaxVersion", SFTPMaxVersion);
@@ -673,6 +674,7 @@
WRITE_SFTP_BUG(Symlink);
WRITE_SFTP_BUG(Utf);
WRITE_SFTP_BUG(SignedTS);
+ WRITE_SFTP_BUG(ForceUtf);
#undef WRITE_SFTP_BUG
WRITE_DATA(Integer, SFTPMaxVersion);
diff -Nur winscp.orig\core\SessionData.h winscp.patch\core\SessionData.h
--- winscp.orig\core\SessionData.h Tue Feb 08 17:01:30 2005
+++ winscp.patch\core\SessionData.h Tue Mar 01 16:11:48 2005
@@ -22,7 +22,7 @@
enum TSshBug { sbIgnore1, sbPlainPW1, sbRSA1, sbHMAC2, sbDeriveKey2, sbRSAPad2,
sbRekey2, sbPKSessID2 };
#define BUG_COUNT (sbPKSessID2+1)
-enum TSftpBug { sbSymlink, sbUtf, sbSignedTS };
+enum TSftpBug { sbSymlink, sbUtf, sbSignedTS, sbForceUtf };
#define SFTP_BUG_COUNT (sbSignedTS+1)
enum TAutoSwitch { asOn, asOff, asAuto };
enum TPingType { ptOff, ptNullPacket, ptDummyCommand };
diff -Nur winscp.orig\core\SftpFileSystem.cpp winscp.patch\core\SftpFileSystem.cpp
--- winscp.orig\core\SftpFileSystem.cpp Wed Feb 09 09:41:30 2005
+++ winscp.patch\core\SftpFileSystem.cpp Tue Mar 01 16:29:14 2005
@@ -292,7 +292,8 @@
inline void AddPathString(const AnsiString Value, int Version, bool Utf)
{
- AddString(Value, (Version >= 4) && Utf);
+// AddString(Value, (Version >= 4) && Utf);
+ AddString(Value, Utf);
}
void AddProperties(unsigned short * Rights, AnsiString * Owner,
@@ -458,7 +459,8 @@
inline AnsiString GetPathString(int Version, bool Utf)
{
- return GetString((Version >= 4) && Utf);
+// return GetString((Version >= 4) && Utf);
+ return GetString(Utf);
}
void GetFile(TRemoteFile * File, int Version, bool ConsiderDST, bool Utf, bool SignedTS)
@@ -1277,6 +1279,7 @@
FAvoidBusy = false;
FUtfStrings = false;
FSignedTS = false;
+ FForceUtf = false;
FSupport = new TSFTPSupport();
FSupport->Extensions = new TStringList();
FExtensions = new TStringList();
@@ -2242,23 +2245,32 @@
}
}
+ FForceUtf = (FTerminal->SessionData->SFTPBug[sbForceUtf] == asOn);
+
if (FVersion >= 4)
{
- FUtfStrings = (FTerminal->SessionData->SFTPBug[sbUtf] == asOff) ||
- ((FTerminal->SessionData->SFTPBug[sbUtf] == asAuto) &&
- (FTerminal->SshImplementation.Pos("Foxit-WAC-Server") != 1));
- if (FUtfStrings)
+ if (FForceUtf)
{
- FTerminal->LogEvent("We will use UTF-8 strings when appropriate");
+ FUtfStrings = true;
}
else
{
- FTerminal->LogEvent("We believe the server has SFTP UTF-8 bug");
+ FUtfStrings = (FTerminal->SessionData->SFTPBug[sbUtf] == asOff) ||
+ ((FTerminal->SessionData->SFTPBug[sbUtf] == asAuto) &&
+ (FTerminal->SshImplementation.Pos("Foxit-WAC-Server") != 1));
}
}
else
{
- FUtfStrings = false;
+ FUtfStrings = FForceUtf;
+ }
+ if (FUtfStrings)
+ {
+ FTerminal->LogEvent("We will use UTF-8 strings when appropriate");
+ }
+ else
+ {
+ FTerminal->LogEvent("We believe the server has SFTP UTF-8 bug");
}
}
//---------------------------------------------------------------------------
@@ -2442,7 +2454,8 @@
File = LoadFile(&ListingPacket, NULL, "");
// security fix
if (((File->FileName.Length() > 2) && IsDots(File->FileName)) ||
- (File->FileName.Pos("/") > 0) || (File->FileName.Pos("\\") > 0))
+ (File->FileName.Pos("/") > 0))
+// (File->FileName.Pos("/") > 0) || (File->FileName.Pos("\\") > 0))
{
FTerminal->LogEvent(FORMAT("Ignored suspicious file '%s'", (File->FileName)));
delete File;
diff -Nur winscp.orig\core\SftpFileSystem.h winscp.patch\core\SftpFileSystem.h
--- winscp.orig\core\SftpFileSystem.h Wed Feb 09 09:40:30 2005
+++ winscp.patch\core\SftpFileSystem.h Tue Mar 01 16:13:25 2005
@@ -76,6 +76,7 @@
TSFTPSupport * FSupport;
bool FUtfStrings;
bool FSignedTS;
+ bool FForceUtf;
void __fastcall CustomReadFile(const AnsiString FileName,
TRemoteFile *& File, char Type, TRemoteFile * ALinkedByFile = NULL,
diff -Nur winscp.orig\forms\Login.cpp winscp.patch\forms\Login.cpp
--- winscp.orig\forms\Login.cpp Wed Feb 09 21:35:02 2005
+++ winscp.patch\forms\Login.cpp Tue Mar 01 16:21:30 2005
@@ -94,6 +94,7 @@
InitializeBugsCombo(SFTPBugSymlinkCombo);
InitializeBugsCombo(SFTPBugUtfCombo);
+ InitializeBugsCombo(SFTPBugForceUtfCombo);
}
//---------------------------------------------------------------------
void __fastcall TLoginDialog::Init()
@@ -231,6 +232,7 @@
if (SFTPBug ## BUG ## Combo->ItemIndex < 0) SFTPBug ## BUG ## Combo->ItemIndex = 0
LOAD_SFTP_BUG_COMBO(Symlink);
LOAD_SFTP_BUG_COMBO(Utf);
+ LOAD_SFTP_BUG_COMBO(ForceUtf);
#undef LOAD_SFTP_BUG_COMBO
// Authentication tab
@@ -495,6 +497,7 @@
#define SAVE_SFTP_BUG_COMBO(BUG) aSessionData->SFTPBug[sb ## BUG] = (TAutoSwitch)(2 - SFTPBug ## BUG ## Combo->ItemIndex);
SAVE_SFTP_BUG_COMBO(Symlink);
SAVE_SFTP_BUG_COMBO(Utf);
+ SAVE_SFTP_BUG_COMBO(ForceUtf);
#undef SAVE_SFTP_BUG_COMBO
// Proxy tab
diff -Nur winscp.orig\forms\Login.dfm winscp.patch\forms\Login.dfm
--- winscp.orig\forms\Login.dfm Wed Feb 09 23:40:12 2005
+++ winscp.patch\forms\Login.dfm Tue Mar 01 16:33:28 2005
@@ -969,7 +969,7 @@
Left = 0
Top = 6
Width = 345
- Height = 70
+ Height = 100
Anchors = [akLeft, akTop, akRight]
Caption = 'Detection of known bugs in SFTP servers'
TabOrder = 0
@@ -992,6 +992,14 @@
Caption = 'Does not use &UTF-8 for SFTP4 and newer'
FocusControl = SFTPBugUtfCombo
end
+ object Label34: TLabel
+ Left = 12
+ Top = 68
+ Width = 115
+ Height = 13
+ Caption = 'Force remote use UTF-8'
+ FocusControl = SFTPBugForceUtfCombo
+ end
object SFTPBugSymlinkCombo: TComboBox
Left = 272
Top = 15
@@ -1011,6 +1019,16 @@
Anchors = [akLeft, akTop, akRight]
ItemHeight = 0
TabOrder = 1
+ end
+ object SFTPBugForceUtfCombo: TComboBox
+ Left = 272
+ Top = 63
+ Width = 61
+ Height = 21
+ Style = csDropDownList
+ Anchors = [akLeft, akTop, akRight]
+ ItemHeight = 0
+ TabOrder = 2
end
end
end
diff -Nur winscp.orig\forms\Login.h winscp.patch\forms\Login.h
--- winscp.orig\forms\Login.h Thu Jan 27 21:27:00 2005
+++ winscp.patch\forms\Login.h Tue Mar 01 16:20:50 2005
@@ -232,6 +232,8 @@
TRadioButton *IPv6Button;
TLabel *Label33;
TComboBox *BugRekey2Combo;
+ TLabel *Label34;
+ TComboBox *SFTPBugForceUtfCombo;
void __fastcall DataChange(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
void __fastcall SessionListViewSelectItem(TObject *Sender,
diff -Nur winscp.orig\core\SftpFileSystem.cpp winscp.patch\core\SftpFileSystem.cpp
--- winscp.orig\core\SftpFileSystem.cpp Wed Feb 09 09:41:30 2005
+++ winscp.patch\core\SftpFileSystem.cpp Wed Mar 02 16:17:22 2005
@@ -2442,16 +2454,35 @@
File = LoadFile(&ListingPacket, NULL, "");
// security fix
if (((File->FileName.Length() > 2) && IsDots(File->FileName)) ||
- (File->FileName.Pos("/") > 0) || (File->FileName.Pos("\\") > 0))
+ (File->FileName.Pos("/") > 0))
{
FTerminal->LogEvent(FORMAT("Ignored suspicious file '%s'", (File->FileName)));
delete File;
}
else
{
- FileList->AddFile(File);
+ // if we find \\, try convert to UTF-8 then check again
+ if (File->FileName.Pos("\\") > 0)
+ {
+ AnsiString tmpstr = EncodeUTF(File->FileName);
+ if (tmpstr.Pos("\\") > 0)
+ {
+ FTerminal->LogEvent(FORMAT("Ignored suspicious file '%s'", (File->FileName)));
+ delete File;
+ }
+ else
+ {
+ FileList->AddFile(File);
+
+ Total++;
+ }
+ }
+ else
+ {
+ FileList->AddFile(File);
- Total++;
+ Total++;
+ }
}
if (Total % 10 == 0)
twu2 寫:不知道有沒有人使用 amule 2.0 版的?
這個軟體應該怎麼設才能在 zh_TW.UTF-8 下看到中文, 且能夠輸入中文?
style "default-text" {
fontset = "-arphic-uming-medium-r-normal--*-160-*-*-p-*-iso10646-1,\
-arphic-uming-medium-r-normal--*-140-*-*-p-*-big5-0,\
-*-freeserif-medium-r-normal--*-140-*-*-p-*-*-*"
}
class "GtkWidget" style "default-text"
正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客