繁体   English   中英

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

[英]Converting string in host character encoding to Unicode in C

有没有一种方法可移植 (即符合C标准)将主机字符编码中的字符串转换为Unicode代码点数组? 我正在使用某些数据序列化软件,但遇到了一个问题,因为尽管我需要通过电线发送UTF-8,但C标准不能保证ASCII编码,因此需要将字符串转换为主机字符编码可能是一项艰巨的任务。

是否有图书馆为我处理此类事情? C标准库中是否隐藏了可以执行以下操作的函数?

C11标准ISO / IEC 9899:2011具有一个新的标头<uchar.h>其中包含一些基本功能来提供帮助。 §7.28Unicode实用程序<uchar.h>对此进行了描述。

定义了两对函数:

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

名称中的r表示“可重启”; 这些功能旨在迭代调用。 mbrtoc{16,32}()对从多字节代码集(因此为mb )转换为char16_tchar32_t c{16,32}rtomb()对从char16_tchar32_t转换为多字节字符序列。

我不确定他们是否会做你想要的。 <uchar.h>头,因此功能不可用在Mac OS X 10.9.1与无论是苹果提供的clang或用“自制” GCC 4.8.2,所以我不会有机会调查他们。 标头确实在带有GCC 4.8.1的Linux(Ubuntu 13.10)上可用。

我认为ICU可能是一个更好的选择-但是,它是一个相当大的库(但这是因为它在支持通用Unicode和通用不同语言环境方面做得很透彻)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM