查看完整版本: [-- 用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解 --]

QTCN开发网 -> Qt中文处理 -> 用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

biosxjj 2010-12-07 11:05

用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解

用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解

j郁闷 服务器应该是unicode 编码的但是怎么转都是乱码

dbzhang800 2010-12-07 11:08
1. 首先确认你的服务器采用何种编码:一般 是 gb18030(gb2312 | gbk)、utf8
2. 采用相应的解码器解码

biosxjj 2010-12-07 11:09
应该是unicode 编码 怎么转呢

dbzhang800 2010-12-07 11:17
引用第2楼biosxjj于2010-12-07 11:09发表的  :
应该是unicode 编码 怎么转呢

不要用应该,你要确认是那种编码。如果你只知道不是gb18030 系列,那么你要确认 utf8, utf16-be, utf16-le,utf32-be, utf32-le 中的哪种。

题外:你在这儿提unicode,应该可以说明你的编码并不太了解

dbzhang800 2010-12-07 11:29
题外:

Unicode 是 编码字符集

utf8, utf16-be, utf16-le,utf32-be, utf32-le ,以及 gb13080 都是Unicode 的 字符集编码  (gbk、gb2312 不是)

biosxjj 2010-12-08 11:03
全部用了 都是乱码 utf8, utf16-be, utf16-le,utf32-be, utf32-le
哇哈哈哈哈

为什么用windows 自己ftp 登陆 显示中文正常呢

dbzhang800 2010-12-08 11:46
引用第5楼biosxjj于2010-12-08 11:03发表的  :
全部用了 都是乱码 utf8, utf16-be, utf16-le,utf32-be, utf32-le
哇哈哈哈哈
为什么用windows 自己ftp 登陆 显示中文正常呢


随便说几句:

1. 从你最后一句话,基本可以确定 服务器编码是 GBK
2. 你要知道,ftp 在编码问题上相当笨,笨到对编码一无所知。所以编码问题需要你自己解决
3. 你要知道,QFtp 遇到这么笨的 ftp 也很无奈,尽管 cd()  get() 等等的参数都是QString ,你必须清楚知道,他们其实都是 latin1 。(所有字符都被作为latin1来处理)
4. 不管你的服务器编码是什么,整个过程中都是作为latin1来处理的(这样可以保证信息不会丢失,同样的方法,在早期的数据库中也被采用)

题外:

如果你对编码有一定了解的话,现在你应该知道怎么做了。 ^_^

1. 对于字节流, "\x..\x..\x..\x..",采用latin1进行变换,不会丢失信息。在QFtp中,你需要先获得这种字节流(QString::toLatin1())

2. 然后根据服务端的编码 (比如GBK) 进行编解码就可以了。

biosxjj 2010-12-08 13:16
通过qstring 返回length 我也发现是字节为单位统计的

谢谢我试一下

biosxjj 2010-12-08 13:44
QString::toLatin1() 搞定了谢谢楼上不知道 tolatin1 和 to stdstring  local8bit 有何区别 用这2个旧不得行 必须要to lation1

dbzhang800 2010-12-08 14:00
引用第8楼biosxjj于2010-12-08 13:44发表的  :
QString::toLatin1() 搞定了谢谢楼上不知道 tolatin1 和 to stdstring  local8bit 有何区别 用这2个旧不得行 必须要to lation1

因为它是latin1,所以应该用toLatin1()

至于这4个(考虑上toAscii)之间的区别,QString 和 QTextCodec 的 Manual中介绍的很详细了,我就不多说了(以免有侮辱大家智商之嫌)

biosxjj 2010-12-09 10:10
latin1 不就是字节流吗!!

yleesun 2016-07-30 23:01
http://blog.csdn.net/u011512437/article/details/43166747这个帖子说的和楼上的解决方式基本一致。我有的ftp服务器上确实解决了,但是在其他的ftp服务器上,却依旧是乱码。可知道还有啥原因引起这个乱码吗?与服务器的ftp设置有没有关系?我用的是centos的vsftpd,作为ftp服务器。


查看完整版本: [-- 用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled