• 12358阅读
  • 11回复

[提问]用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解 [复制链接]

上一主题 下一主题
离线biosxjj
 

只看楼主 倒序阅读 楼主  发表于: 2010-12-07
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
用QFTP 访问ftp服务器 得到的中文名 都是乱码 求解

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

只看该作者 1楼 发表于: 2010-12-07
回 楼主(biosxjj) 的帖子
1. 首先确认你的服务器采用何种编码:一般 是 gb18030(gb2312 | gbk)、utf8
2. 采用相应的解码器解码
离线biosxjj

只看该作者 2楼 发表于: 2010-12-07
应该是unicode 编码 怎么转呢
离线dbzhang800

只看该作者 3楼 发表于: 2010-12-07
引用第2楼biosxjj于2010-12-07 11:09发表的  :
应该是unicode 编码 怎么转呢

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

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

只看该作者 4楼 发表于: 2010-12-07
题外:

Unicode 是 编码字符集

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

只看该作者 5楼 发表于: 2010-12-08
全部用了 都是乱码 utf8, utf16-be, utf16-le,utf32-be, utf32-le
哇哈哈哈哈

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

只看该作者 6楼 发表于: 2010-12-08
引用第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

只看该作者 7楼 发表于: 2010-12-08
回 6楼(dbzhang800) 的帖子
通过qstring 返回length 我也发现是字节为单位统计的

谢谢我试一下
离线biosxjj

只看该作者 8楼 发表于: 2010-12-08
QString::toLatin1() 搞定了谢谢楼上不知道 tolatin1 和 to stdstring  local8bit 有何区别 用这2个旧不得行 必须要to lation1
离线dbzhang800

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

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

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

只看该作者 10楼 发表于: 2010-12-09
回 9楼(dbzhang800) 的帖子
latin1 不就是字节流吗!!
离线yleesun

只看该作者 11楼 发表于: 2016-07-30
http://blog.csdn.net/u011512437/article/details/43166747这个帖子说的和楼上的解决方式基本一致。我有的ftp服务器上确实解决了,但是在其他的ftp服务器上,却依旧是乱码。可知道还有啥原因引起这个乱码吗?与服务器的ftp设置有没有关系?我用的是centos的vsftpd,作为ftp服务器。
快速回复
限100 字节
 
上一个 下一个