我有一个以ANSI格式编码的文件(在Notepad ++中显示为ANSI编码),它还显示特殊字符(度数celcius,磅等),并且在阅读时我想将所有字符转换为unicode。
如何在C / C ++或Qt中将ANSI转换为Unicode?
答案 0 :(得分:1)
我的Qt仍然非常生疏,但有以下几点:
QFile inFile("foo.txt");
if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QFile outFile("foo.out.txt");
if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTextStream in(&inFile);
QTextStream out(&outFile);
out.setCodec("UTF-8");
while (!in.atEnd()) {
QString line = in.readLine();
out << line;
}
从QFile
和QTextStream
的文档中拼凑而成,两者都包含读取和写入文件的示例。 QTextStream
的默认值是使用旧版编码,因此我们只需要在输出QTextStream
上设置显式编码。
如果文件不是太大,您也可以使用
out << in.readAll();
而不是线上的循环。循环尤其可能会在输出文件中添加一个尾随换行符(虽然文档不是很清楚)。
答案 1 :(得分:0)
答案 2 :(得分:0)
只需使用QTextStream
阅读即可。它将应用QTextCodec::codecForLocale
,它使用8位字符的默认(“ANSI”)转换为Unicode。
请注意,如果您已将ANSI文本文件复制到Mac或Linux,则无法使用,因为它们没有ANSI的概念。对于他们来说,ANSI文本文件将是类似于ASCII的,因此您应首先转换为Unicode(UTF-8)然后复制。