【发布时间】:2014-02-02 22:48:49
【问题描述】:
我知道这个问题已经在这里被问过很多次了,我确实阅读了一些答案,但是有一些建议的解决方案,我试图找出最好的解决方案。
我正在编写一个 C99 应用程序,它基本上接收以 UTF-8 编码的 XML 文本。
它的部分工作是复制和操作那个字符串(找到一个 substr,cat it,ex..)
由于我现在不想使用外部非标准库,因此我尝试使用 wchar_t 来实现它。
目前,我使用 mbstowcs 将其转换为 wchar_t 以便于操作,并且对于某些输入,我尝试使用不同的语言 - 它运行良好。
问题是,我确实读过一些人对 UTF-8 和 mbstowcs 有一些问题,所以我想知道这种使用是否被允许/可接受。
我面临的其他选择是使用带有 WCHAR_T 参数的 iconv。事情是,我在一个平台(不是 PC)上工作,它的语言环境非常非常仅限于 ANSI C 语言环境。那个怎么样?
我也遇到过一些非常流行的 C++ 库。但我仅限于 C99 实现。
另外,我将在另一个平台上编译此代码,wchar_t 的 sizeof 不同(2 字节与我的机器上的 4 字节)。我该如何克服呢?使用固定大小的字符容器?但是,我应该改用哪些操作函数?
很高兴听到一些想法。谢谢。
【问题讨论】:
-
你会遇到困难和问题,我保证。 UTF-8 是一种编码,
wchar_t是一种存储细节,两者无关。wchar_t只是让处理 UTF-16 稍微容易一些,但是代理对呢? UTF-8 中的多字节单字符? -
谢谢。你能解释一下吗?
-
mbstowcs 有什么问题?
-
@Johnnyguitar 下面发布的答案更好地解释了我的观点。
-
@Dai:UTF-8 中不存在“代理对”。它们是 UTF-16 的编码细节。