我的CBXE IdFTP 出現亂碼

iori101 2010-11-11 11:36:55
我的CBXE IdFTP 出現亂碼
請問怎麼解決?
...全文
154 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
iori101 2010-11-12
  • 打赏
  • 举报
回复
補充一點
我那些是繁體文件來的
還有就是我以前用cb2007寫的FTP沒亂碼
用CBXE 就有亂碼, 真不知怎麼解決
望各位大大幫忙
在此先謝謝
iori101 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 sczyq 的回复:]
使用网络截包工具看一看,服务器传回的列表是什么内容,大致可以分析出FTP服务器是什么编码,然后采用相应的编码器。

IdFTP1->IOHandler->DefStringEncoding = TEncoding::Default;
IdFTP1->IOHandler->DefStringEncoding = TEncoding::UTF8;
IdFTP1->IOHandler->DefS……
[/Quote]

三個都試過了,還是不行啊
IdFTP1->IOHandler->DefStringEncoding = TEncoding::UTF7;
這都試了
以前同一代碼能在CB2009上成功的
cb2010沒試過
真不知怎麼了啊
請各位多多幫忙啊
sczyq 2010-11-12
  • 打赏
  • 举报
回复
使用网络截包工具看一看,服务器传回的列表是什么内容,大致可以分析出FTP服务器是什么编码,然后采用相应的编码器。

IdFTP1->IOHandler->DefStringEncoding = TEncoding::Default;
IdFTP1->IOHandler->DefStringEncoding = TEncoding::UTF8;
IdFTP1->IOHandler->DefStringEncoding = TEncoding::Unicode;

都可以试试,


使用这个 TEncoding::Default 时,必须是服务器与客户端相同的操作系统语言,楼主是用繁体字,若服务器是简体汉字,就可能有问题了(中文字)。FTP服务器也太多了,问题也很多。

在简体中文操作系统时,TEncoding::Default 也许就是 GB2313
在繁体中文操作系统时,TEncoding::Default 也许就是 BIG5
iori101 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sczyq 的回复:]
OnConnect

void __fastcall xxx::IdFTP1Connect(TObject * ASender)
{
IdFTP1->IOHandler->DefTextEncoding = TEncoding::Default;
}

估计轮到我只有1分了,真没劲!
[/Quote]


報錯啊
這個就行
IdFTP1->IOHandler->DefStringEncoding = TEncoding::Default;
不過沒用, 還是不行啊
請各位大大幫忙啊
sczyq 2010-11-12
  • 打赏
  • 举报
回复
OnConnect

void __fastcall xxx::IdFTP1Connect(TObject * ASender)
{
IdFTP1->IOHandler->DefTextEncoding = TEncoding::Default;
}

估计轮到我只有1分了,真没劲!

iori101 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouzhangkui 的回复:]
编码的问题
用UTF8ToString、UTF8ToUnicodeString等 去转换试试
[/Quote]

請問怎麼轉換啊
我不是太懂這個啊
周药师 2010-11-11
  • 打赏
  • 举报
回复
编码的问题
用UTF8ToString、UTF8ToUnicodeString等 去转换试试
iori101 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhouzhangkui 的回复:]
C/C++ code

//我这里没有FTP服务器 无法测试 你用
t2->DelimitedText = UTF8ToString(t1->Strings[i]) ;
t2->DelimitedText = UTF8ToUnicodeString(t1->Strings[i]) ;


//下面还有
extern PACKAGE int __fastcall UnicodeT……
[/Quote]


我copy全部了還是不行,說我的List index out of bounds(8)
報錯了啊
周药师 2010-11-11
  • 打赏
  • 举报
回复

//我这里没有FTP服务器 无法测试 你用
t2->DelimitedText = UTF8ToString(t1->Strings[i]) ;
t2->DelimitedText = UTF8ToUnicodeString(t1->Strings[i]) ;


//下面还有
extern PACKAGE int __fastcall UnicodeToUtf8 [[deprecated]](char * Dest, WideChar * Source, int MaxBytes)/* overload */;
extern PACKAGE unsigned __fastcall UnicodeToUtf8(char * Dest, unsigned MaxDestBytes, WideChar * Source, unsigned SourceChars)/* overload */;
extern PACKAGE int __fastcall Utf8ToUnicode [[deprecated]](WideChar * Dest, char * Source, int MaxChars)/* overload */;
extern PACKAGE unsigned __fastcall Utf8ToUnicode(WideChar * Dest, unsigned MaxDestChars, char * Source, unsigned SourceBytes)/* overload */;
extern PACKAGE RawByteString __fastcall UTF8Encode(const WideString WS)/* overload */;
extern PACKAGE RawByteString __fastcall UTF8Encode(const UnicodeString US)/* overload */;
extern PACKAGE RawByteString __fastcall UTF8Encode(const RawByteString A)/* overload */;
extern PACKAGE ShortString __fastcall UTF8EncodeToShortString(const WideString WS)/* overload */;
extern PACKAGE ShortString __fastcall UTF8EncodeToShortString(const UnicodeString US)/* overload */;
extern PACKAGE ShortString __fastcall UTF8EncodeToShortString(const RawByteString A)/* overload */;
extern PACKAGE WideString __fastcall UTF8Decode [[deprecated("Use UTF8ToWideString or UTF8ToString")]](const RawByteString S);
extern PACKAGE WideString __fastcall UTF8ToWideString(const RawByteString S);
extern PACKAGE UnicodeString __fastcall UTF8ToUnicodeString(const RawByteString S)/* overload */;
extern PACKAGE UnicodeString __fastcall UTF8ToUnicodeString(const char * S)/* overload */;
extern PACKAGE UnicodeString __fastcall UTF8ToUnicodeString(const ShortString &S)/* overload */;
extern PACKAGE UnicodeString __fastcall UTF8ToString(const RawByteString S)/* overload */;
extern PACKAGE UnicodeString __fastcall UTF8ToString(const ShortString &S)/* overload */;
extern PACKAGE UnicodeString __fastcall UTF8ToString(const char * S)/* overload */;
extern PACKAGE UnicodeString __fastcall UTF8ToString(char const *S, const int S_Size)/* overload */;
extern PACKAGE RawByteString __fastcall AnsiToUtf8(const UnicodeString S);
extern PACKAGE UnicodeString __fastcall Utf8ToAnsi(const RawByteString S);
extern PACKAGE UnicodeString __fastcall LoadResString(PResStringRec ResStringRec);
extern PACKAGE PUCS4Char __fastcall PUCS4Chars(const UCS4String S);
extern PACKAGE UCS4String __fastcall WideStringToUCS4String(const WideString S);
extern PACKAGE WideString __fastcall UCS4StringToWideString(const UCS4String S);
iori101 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zzbinfo 的回复:]
我用bcb6测试了你得代码,没有你说得乱码,检查其他得看看,是不是其他得问题.
[/Quote]

我用的是CBXE, 可能是indy版本不同, 在這個新版就是亂碼啊
我也攪不懂怎麼回事
zzbinfo 2010-11-11
  • 打赏
  • 举报
回复
我用bcb6测试了你得代码,没有你说得乱码,检查其他得看看,是不是其他得问题.
iori101 2010-11-11
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *t1=new TStringList();
TStringList *t2=new TStringList();

IdFTP1->Connect();
if(IdFTP1->Connected())
{
ListView->Clear();
IdFTP1->List(t1,"",true); //只要ZIP的可用IdFTP1->List(t1,"*.zip",true);
//IdFTP1->Disconnect();

for(int i=0;i<t1->Count;i++)
{

t2->DelimitedText = t1->Strings[i] ;

Memo1->Lines->Add(t2->Strings[8]); //这个就是纯文件名
ListView->Items->BeginUpdate();
TListItem *ListItem;
ListItem = ListView->Items->Add();
ListItem->Caption =t2->Strings[8];

ListItem->SubItems->Add(t2->Strings[7]);
ListItem->SubItems->Add(t2->Strings[6]);
ListItem->SubItems->Add(t2->Strings[5]);
ListItem->SubItems->Add(t2->Strings[4]);
ListItem->SubItems->Add(t2->Strings[3]);
ListItem->SubItems->Add(t2->Strings[2]);
ListItem->SubItems->Add(t2->Strings[1]);
ListItem->SubItems->Add(t2->Strings[0]);



ListView->Items->EndUpdate();
}
}
delete t1;
delete t2;
}
ccrun.com 2010-11-11
  • 打赏
  • 举报
回复
热情回复,积极接分。
人心散了,队伍不好带了。反正灌水也能得分,谁又愿意认真的仔细的回答问题呢?
周药师 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iori101 的回复:]

引用 3 楼 zhouzhangkui 的回复:
C/C++ code

//extern PACKAGE UnicodeString __fastcall UTF8ToString(const RawByteString S)/* overload */;
String Str = UTF8ToString(yourLuanMa);


不好音思啊, 不行啊
我的是讀取中文文件……
[/Quote]
贴你的代码 看看
iori101 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzbinfo 的回复:]
C/C++ code
try{
BytesToTransfer = IdFTP->Size(AnsiToUtf8(FileName));
IdFTP->Get(AnsiToUtf8(FileName),ExtractFileDir(Application->ExeName)+"\\UpDate\\"+FileName,true);
}
[/Quote]

不行啊,還是亂碼啊
是不是我的列表問題啊
zzbinfo 2010-11-11
  • 打赏
  • 举报
回复
try{
BytesToTransfer = IdFTP->Size(AnsiToUtf8(FileName));
IdFTP->Get(AnsiToUtf8(FileName),ExtractFileDir(Application->ExeName)+"\\UpDate\\"+FileName,true);
}
iori101 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouzhangkui 的回复:]
C/C++ code

//extern PACKAGE UnicodeString __fastcall UTF8ToString(const RawByteString S)/* overload */;
String Str = UTF8ToString(yourLuanMa);
[/Quote]

不好音思啊, 不行啊
我的是讀取中文文件名時亂碼的

我找了一找, 說可能是IdFTP的編碼問題, 真不知怎麼攪啊
周药师 2010-11-11
  • 打赏
  • 举报
回复

//extern PACKAGE UnicodeString __fastcall UTF8ToString(const RawByteString S)/* overload */;
String Str = UTF8ToString(yourLuanMa);

1,314

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧