首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

字符编码转换的有关问题

2013-01-04 
字符编码转换的问题编程环境:客户端:Linux,Qt4.8UTF-8服务端:Windows,VS2008数据库:Oracle 10gGBK现在写入

字符编码转换的问题
编程环境:
客户端:Linux,Qt4.8       UTF-8
服务端:Windows,VS2008    
数据库:Oracle 10g         GBK

现在写入数据库的全是乱码。需要在客户端修改编码格式,所以用Qt,服务端不能变。

具体问题:
把Linux下的文件名,读到QString中,转换成GBK编码,放到char[]中,保证服务端不做修改就能正确入库。

QString filename="包括汉字UTF-8";
char buf[100];
... ...//在这里写入buf
socket.write(buf,100);

[解决办法]
你可以这样做:
暂时将你的程序转换成支持GKB编码的
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); 
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
然后写到数据库,
写完后在恢复成UTF-8编码的
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));       
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); 

理论上这种方法是可行的,你试试看。

[解决办法]
QString里面是以unicode码来存储 可以说QString是一个标准的中介 你可以使用QTextCodec的fromUnicode和toUnicode来进行编码转换 另外注意 你的源码文件也是有编码的 只是cpp文件没有体现
[解决办法]

const char* Utf8toGB(const char* str, int size)
{
    //UTF-8 Char* to GB QByteArray
    return QTextCodec::codecForName("GB18030")->fromUnicode(QTextCodec::codecForName("UTF-8")->toUnicode(str, size));
}
QByteArray Utf8toGB(const QString& str)
{
    return QTextCodec::codecForName("GB18030")->fromUnicode(str);
}


在你准备发送前,先将qstring进行转码,然后存入char[]发送出去
[解决办法]
QString filename,filename里面已经放了文件名称,然后你把它转成std::string m_filename中,具体的做法是QString localstring = QString(filename.tolocal8Bit()), m_filename = localstring.tostdstring()这样你把m_filename传给服务器端就不会出现乱码。

热点排行