将主机字符编码中的字符串转换为C中的Unicode

时间:2014-01-10 06:09:04

标签: c unicode encoding

有没有办法可移植(即符合C标准)将主机字符编码中的字符串转换为Unicode代码点数组?我正在研究一些数据序列化软件,我遇到了一个问题,因为虽然我需要通过线路发送UTF-8,但C标准并不保证ASCII编码,因此在主机字符编码中转换字符串可能是一项非常重要的任务。

是否有图书馆为我照顾这种东西? C标准库中是否隐藏了可以执行此类操作的功能?

1 个答案:

答案 0 :(得分:1)

C11标准,ISO / IEC 9899:2011,有一个新的标题<uchar.h>,有基本的设施可以提供帮助。它在§7.28Unicode实用程序<uchar.h>

部分中进行了描述

定义了两对函数:

  • c16rtomb()mbrtoc16() - 使用char16_t类型uint_least16_t
  • c32rtomb()mbrtoc32() - 使用char32_t类型uint_least32_t

名称中的r用于'可重启';这些函数旨在迭代调用。 mbrtoc{16,32}()对从多字节代码集(因此为mb)转换为char16_tchar32_tc{16,32}rtomb()对从char16_tchar32_t转换为多字节字符序列。

我不确定他们是否会做你想做的事。 {@ 1}}标题因此功能在Mac OS X 10.9.1上不可用Apple提供的<uchar.h>或'home-built'GCC 4.8.2,所以我没有有机会调查他们。该标题似乎在Linux(Ubuntu 13.10)和GCC 4.8.1上可用。

我认为ICU可能是一个更好的选择 - 然而,它是一个相当大的库(但这是因为它总体上支持一般的Unicode和一般的不同语言环境)。 / p>