【问题标题】:What's the difference between glib gunichar and wchar_t and which is better for cross-platform solutions?glib gunichar 和 wchar_t 有什么区别,哪个更适合跨平台解决方案?
【发布时间】:2012-04-08 16:23:48
【问题描述】:

我正在尝试编写一些仅在用户安装了gcc 并安装了glib 的情况下可移植的C 代码。

根据我的所有研究,我发现gcc 的wchar_t 始终定义为4 个字节,glib 的gunichar 也是4 个字节。

我没有想出的是,如果gunichar,wchar_t 也被编码为 UCS4。是这样吗?如果是这样,我应该可以简单地将gunichar* 转换为wchar_t* 并使用stdc wcs* 函数,对吧?

【问题讨论】:

    标签: c unicode cross-platform glib wchar-t


    【解决方案1】:

    如果您使用 GLib,请不要使用 wchar_t。使用它的 unicode 支持,它比 C 标准库的支持好多。

    wchar_t 在 Linux 和 Mac OS(以及其他一些)上是 4 个字节,而不是在 Windows(那里是 2 个字节)和其他一些上。可移植代码意味着像瘟疫一样避免wchar_t。

    【讨论】:

    • 嗯。谢谢。我刚刚注意到几乎所有 glib unicode 函数都在 utf8 字符串上运行,据我了解(可能是错误的)迭代多字节编码的 char 数组效率低下,因为您需要使用迭代器来确保您得到一个完整的字符,而不是一个字节(不能简单地 i++ 遍历数组)。我刚刚重新检查了文档,并且 g_utf8_next_char() 被实现为宏,所以我想这对我来说不再是什么大问题了。再次感谢。
    • @skot 体面的 unicode 支持是昂贵的,不管你怎么说。一旦您的程序/库运行,而不是之前,担心性能。
    • 好点。到目前为止,事情似乎进展顺利,所以如果/当我需要时,我会越过那座桥。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2021-11-21
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多