将特殊字符转换为unicode c ++

时间:2013-08-02 18:03:34

标签: c++ utf-8 special-characters decode icu

目前,我有这个字符°(一个度数符号),我需要将其转换为/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

2 个答案:

答案 0 :(得分:0)

UNICODE有三个基本内容。

  1. 阅读字符
  2. 将字符存储在内存中
  3. 书写/展示角色
  4. 在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();
}