目前,我有这个字符°
(一个度数符号),我需要将其转换为/00B0
。我注意到有一个名为ICU for C / C ++的库,但是我需要使用这样的库吗?我的输入编码为ISO / IEC 8859-1。
一般的C ++库是否已经实现了这个DECODE功能,还是这些操作所需的ICU库?
如果有这样的方法来调用°
这样的角色,请转发给我或写一个简单的例子? :)
编辑所以我循环整行,当我看到一个特殊字符,或者更确切地说某个字符不是字母字符,数字字符,' - '字符或''字符时,我要求输出没有通过任何测试的角色。
我得到类似\303
的输出,这是特殊字符的OCTAL格式。下面是我用来进行测试的代码:
if (isalpha(aline[i+1]) || isdigit(aline[i+1]) || aline[i+1] == '-' || aline[i+1] == ' ')
regionName.push_back(aline[i+1]);
else
cout << aline[i+1] << endl;
所以当执行else语句时,我得到八进制输出......默认情况下......我如何将其更改为unicode格式?
示例输出:
\303
\203
\302
答案 0 :(得分:0)
UNICODE
有三个基本内容。
在unicode-applications中,字符串通常存储为2字节字符。 对于1和3,在纯C ++中没有任何东西。对于Point 2,标准C ++库为您提供了一个类wstring,用于将字符存储为2字节字符串。
如果你说“我有炭”你的意思是什么?你有文件吗?你从控制台读取它吗?在这两种情况下,您都必须知道输入源的编码。
显示char时,您必须确定,您的GUI库可以处理unicode。
伪代码的基本步骤是:
char* myData = "some local-encoding data";
MyUnicodeCapableStrincClass myString = MyUnicodeCapableStrincClass::fromsomeLocalEncoding( myData );
MyUnicodeCapableGuiTextControl.setText( myString );
了解这一点,我希望你能更快地在ICU文档中找到代码示例。 到目前为止我还没有意识到ICU。 (我正在使用Qt - 自1998年以来就包含了unicode。)
答案 1 :(得分:0)
Welp,继承人我需要的答案:)效果很棒!
包括以下库:
#include <sstream>
#include <iomanip>
并将您喜欢的任何字符串传递给函数,它将编码所有“特殊”字符
static string EncodeNonASCIICharacters (std::string value)
{
ostringstream stringBuilder;
for (int i = 0; i < value.length(); i++)
{
unsigned int character = *reinterpret_cast<unsigned char *>(&(value[i]));
if (character > 127)
{
stringBuilder << "\\u";
stringBuilder << setw(4) << hex << setfill('0') << character;
} else {
string aValue;
aValue += value[i];
stringBuilder << aValue;
}
}
return stringBuilder.str();
}