如何将ANSI格式文件转换为Unicode

时间:2012-04-26 05:37:59

标签: c++ qt unicode ansi

我有一个以ANSI格式编码的文件(在Notepad ++中显示为ANSI编码),它还显示特殊字符(度数celcius,磅等),并且在阅读时我想将所有字符转换为unicode。

如何在C / C ++或Qt中将ANSI转换为Unicode?

3 个答案:

答案 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;
}

QFileQTextStream的文档中拼凑而成,两者都包含读取和写入文件的示例。 QTextStream的默认值是使用旧版编码,因此我们只需要在输出QTextStream上设置显式编码。

如果文件不是太大,您也可以使用

out << in.readAll();

而不是线上的循环。循环尤其可能会在输出文件中添加一个尾随换行符(虽然文档不是很清楚)。

答案 1 :(得分:0)

答案 2 :(得分:0)

只需使用QTextStream阅读即可。它将应用QTextCodec::codecForLocale,它使用8位字符的默认(“ANSI”)转换为Unicode。

请注意,如果您已将ANSI文本文件复制到Mac或Linux,则无法使用,因为它们没有ANSI的概念。对于他们来说,ANSI文本文件将是类似于ASCII的,因此您应首先转换为Unicode(UTF-8)然后复制。