- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何在 QString
中使用语言(如阿拉伯语或中文)?
我正在创建一个QString
:
QString m = "سلام علیکم";
然后我将它保存到一个文件中:
void stWrite(QString Filename,QString stringtext){
QFile mFile(Filename);
if(!mFile.open(QIODevice::WriteOnly | QIODevice::Append |QIODevice::Text))
{
QMessageBox message_file_Write;
message_file_Write.warning(0,"Open Error"
,"could not to open file for Writing");
return;
}
QTextStream out(&mFile);
out << stringtext<<endl;
out.setCodec("UTF-8");
mFile.flush();
mFile.close();
}
但是,当我打开结果文件时,我看到:
???? ????
出了什么问题?如何让我的角色在文件中正确保存?
最佳答案
QString
有unicode支持。所以,* 没有错:
QString m = "سلام علیکم";
大多数现代编译器使用 UTF-8 编码此普通字符串文字(您可以在 C++11 中使用 u8"سلام عليكم"
强制执行此操作,请参阅 here)。字符串文字的数组类型为 char
秒。当QString
is initialized from a const char*
,它希望数据以 UTF-8 编码。一切都按预期进行。
Qt中所有的输入控件和文本绘制方法都可以接受这样的字符串并显示,没有任何问题。参见 here获取支持的语言列表。
至于你将这个字符串写入文件的问题,你只需要将你正在写入的数据的编码设置为可以编码这些国际字符的编解码器(例如UTF-8)。
来自docs , 当使用 QTextStream::operator<<(const QString& string)
, 字符串在写入流之前使用分配的编解码器进行编码。
您遇到的问题是您正在使用 operator<<
在分配之前。你应该setCodec
之前 写作。您的代码应如下所示:
void stWrite(QString Filename,QString stringtext){
QFile mFile(Filename);
if(!mFile.open(QIODevice::WriteOnly | QIODevice::Append |QIODevice::Text))
{
QMessageBox message_file_Write;
message_file_Write.warning(0,"Open Error"
,"could not to open file for Writing");
return;
}
QTextStream out(&mFile);
out.setCodec("UTF-8");
out << stringtext << endl;
mFile.flush();
mFile.close();
}
* 在 translation phase 1 , 任何不在基本字符集中的源文件字符都被替换为指定字符的通用字符名,基本字符集定义如下:
N4140 §2.3 [lex.charset]/1
The basic source character set consists of 96 characters: the space character, the control characters representing horizontal tab, vertical tab, form feed, and new-line, plus the following 91 graphical characters:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’
这意味着像这样的字符串:
QString m = "سلام عليكم";
将被翻译成类似的东西:
QString m = "\u0633\u0644\u0627\u0645\u0020\u0639\u0644\u064a\u0643\u0645";
假设源文件编码为支持存储此类字符的编码,例如UTF-8。
关于c++ - 如何在 QString 中使用语言(如阿拉伯语或中文)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40563390/
我是一名优秀的程序员,十分优秀!