-1

目前,我有这个字符°(度数符号),我需要将其转换为/00B0. 我注意到有一个名为 ICU for C/C++ 的库,但我需要使用这样的库吗?我的输入被编码为 ISO/IEC 8859-1。

通用 C++ 库是否已经实现了此 DECODE 功能,或者此类操作是否需要 ICU 库?

如果有这样的方法来调用一个角色,比如°请转发我或者写一个简单的例子?:)。

编辑所以我循环遍历整行,当我看到一个特殊字符,或者更确切地说是一些不是字母字符、数字字符、'-' 字符或'' 字符的字符时,我要求输出该字符没有通过任何这些测试。

我得到一个输出,例如\303特殊字符的八进制格式。这是我用来做测试的代码:

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
4

2 回答 2

0

谈到UNICODE.

  1. 读字符
  2. 在内存中存储字符
  3. 书写/显示字符

在 unicode 应用程序中,字符串通常存储为 2 字节字符。对于 1 和 3,纯 C++ 中没有任何内容。对于 Point 2,标准 C++ 库为您提供了一个 wstring 类,用于将字符存储为 2 字节字符串。

如果您说“我有字符”,那是什么意思?你有它在一个文件?你从控制台读取它吗?在这两种情况下,您都必须知道输入源的编码。

显示字符时,您必须确保您的 GUI 库可以处理 unicode。

所以伪代码的基本步骤是:

 char* myData = "some local-encoding data";
 MyUnicodeCapableStrincClass myString = MyUnicodeCapableStrincClass::fromsomeLocalEncoding( myData );
 MyUnicodeCapableGuiTextControl.setText( myString );

知道了这一点,我希望你应该更快地找到 ICU 文档中的代码示例。直到现在我才知道ICU。(我使用的是 Qt - 自 1998 年以来包含 unicode。)

于 2013-08-02T18:16:52.133 回答
0

韦尔普,这是我需要的答案:)效果很好!!

包括以下库:

#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();
}
于 2013-08-13T00:46:52.367 回答