用C ++解释转义的unicode字符

时间:2014-03-31 14:07:45

标签: c++ string unicode

我们说我有一个名为test.txt的文件,其中包含以下文字:

\u003cdiv style=\"text-align: left;\" trbidi=\"on\"\u003e\nAppending is not creating

如果我想通过char阅读它char,它的外观如下:

代码1:从文件中读取

ifstream file;
file.open("test.txt");
string line;
while (getline(file, line)){
    cout << line<< endl; // prints \u003cdiv style=\"text-align: left;\" trbidi=\"on\"\u003e\nAppending is not creating
}

但是,如果我在代码中声明了相同的字符串,则会检测到转义字符并将其打印出来。

代码2:简单字符串

string line2 ("\u003cdiv style=\"text-align: left;\" trbidi=\"on\"\u003e\nAppending is 
cout << line2<< endl; // prints <div style="text-align: left;" trbidi="on">\n   Appending is not creating

这是完全正常的,因为\是C ++字符串的转义字符。

这提出了一个问题:是否可以使用第一个代码得到相同的结果(即,将每一行解释为代码2中定义的字符串)?

1 个答案:

答案 0 :(得分:2)

STL类string没有任何执行此操作的功能。您必须实现自己的函数才能将转义的字符表达式更改为正确的转义字符。这个函数看起来像这样:

string parse_escaped_characters(string s) {
    string s2;
    for (int i = 0; i < s.size(); ++i) {
        if (s[i] == '\\') {
            switch (s[i+1]) {
                case 'n': s2 += '\n'; ++i; break;
                case '\"': s2 += '\"'; ++i; break;
                //and so on...
            }
        }
        else s2 += s[i];
    }
    return s2;
 }

或者您可以搜索库以处理包含此功能的字符串。