字符编码转换的有关问题
字符编码转换的问题编程环境:客户端: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传给服务器端就不会出现乱码。