首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C编程:如何为Unicode编程?

C编程:如何为Unicode编程?
EN

Stack Overflow用户
提问于 2009-02-08 21:22:16
回答 4查看 53.9K关注 0票数 86

进行严格的Unicode编程需要哪些前提条件?

这是否意味着我的代码不应该在任何地方使用char类型,并且需要使用可以处理wint_twchar_t的函数

多字节字符序列在此场景中扮演的角色是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-08 22:44:07

请注意,这本身并不是关于“严格的unicode编程”,而是一些实际经验。

我们公司所做的就是围绕IBM的ICU库创建一个包装器库。包装库具有UTF-8接口,并在需要调用ICU时转换为UTF-16。在我们的例子中,我们并不太担心性能问题。当性能是一个问题时,我们还提供了UTF-16接口(使用我们自己的数据类型)。

应用程序可以在很大程度上保持原样(使用char),尽管在某些情况下,它们需要了解某些问题。例如,代替strncpy(),我们使用了一个包装器来避免截断UTF-8序列。在我们的例子中,这已经足够了,但也可以考虑检查组合字符。我们还提供了用于计算码点数量、字素数量等的包装器。

在与其他系统交互时,我们有时需要进行自定义字符组合,因此您可能需要一些灵活性(取决于您的应用程序)。

我们不使用wchar_t。使用ICU可以避免在可移植性方面出现意想不到的问题(当然,不会出现其他意想不到的问题:-)。

票数 22
EN

Stack Overflow用户

发布于 2009-02-09 06:03:11

据我所知,wchar_t是依赖于实现的(从这个wiki article可以看出)。而且它不是unicode。

票数 2
EN

Stack Overflow用户

发布于 2009-02-09 06:40:43

基本上,您希望将内存中的字符串作为wchar_t数组而不是char进行处理。当您执行任何类型的I/O (如读/写文件)时,您可以使用UTF-8 (这可能是最常见的编码)进行编码/解码,这很容易实现。只要搜索一下RFC就行了。所以在内存中没有任何东西应该是多字节的。一个wchar_t代表一个字符。但是,在进行序列化时,需要将其编码为UTF-8之类的格式,其中某些字符由多个字节表示。

您还必须为宽字符串编写新版本的strcmp等,但这不是一个大问题。最大的问题将是与只接受char数组的库/现有代码进行互操作。

当涉及到sizeof(wchar_t)时(如果你想做好它,你需要4个字节),如果你需要的话,你可以用typedef/macro hack将它重新定义为更大的大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/526430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档