【问题标题】:AIX C++ iconv conversion failsAIX C++ iconv 转换失败
【发布时间】:2017-08-30 15:31:03
【问题描述】:

我在 AIX 上使用 c++/XMS 来处理来自 MQ 的传入消息。现在我需要将消息从 ISO8859-1 转换为 UTF-8。我执行以下操作。

================================================ =======

void iso2utf8( char* text_iso, char* text_utf8, int nLen)
{
    cout << "Converting to UTF-8." << endl;
    iconv_t ic;
    ic = iconv_open("UTF-8", "ISO8859-1"); // iso->utf8
    cout << "Size of text_iso" << sizeof(text_iso) << endl;

    size_t il = nLen;
    size_t ol = nLen;

    cout << "Size of text_iso" << ol << endl;
    iconv(ic , &text_iso, &il, &text_utf8, &ol);
    iconv_close(ic);

    cout << "Message in UTF-8: " << text_utf8 << endl;

    return;
}

================================================ =======

转换后,当我将消息保存到文件中时,我得到了 ISO8859-1 消息。有关如何解决此问题的任何提示。我使用 fstream 写入文件。

【问题讨论】:

  • 您的代码中完全没有错误检查 - 所有这些 iconv* 调用都可能失败 - 您应该检查每个的结果(错误给出 -1 的结果并设置 errno) - 这样你至少可以知道为什么你的代码不工作了。
  • 它对我有用(包括内置 iconv 和 GNU-iconv),所以我建议你创建一个 mcve stackoverflow.com/help/mcve
  • 感谢您的 cmets。好的。我进行了适当的更改并很快恢复。
  • 请注意,对输入和输出都使用 'nLen' 是个坏主意:utf8 通常比 iso-8859-1 长,因为 0x80..0xff 代码变成 2 字节序列。

标签: c++ ibm-mq aix utf xms


【解决方案1】:

你应该写“ISO-8859-1”而不是“ISO8859-1”

iconv man 的链接: https://www.gnu.org/software/libiconv/documentation/libiconv-1.13/iconv_open.3.html

引用: fromcode 和 tocode 允许的值以及支持的组合取决于系统。对于 libiconv 库,所有组合都支持以下编码。

欧洲语言

ASCII, ISO−8859−{1,2,3,4,5,7,9,10,13,14,15,16} ...

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多