首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用C语言对汉字(UTF-8)进行操作?

如何用C语言对汉字(UTF-8)进行操作?
EN

Stack Overflow用户
提问于 2013-11-25 09:38:16
回答 2查看 628关注 0票数 0

如果输入类似于世界+你好,那么如何在C中执行这些UTF-8 unicode操作?:

  1. +字符处的字符串拆分,并将两段汉字放入两个单独的数组:str1 = 世界str2 = 你好
  2. 比较两个数组,看看汉字是否相同。

汉字将从终端输入。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-25 09:46:54

UTF-8的优点之一是,如果您找到一个有效的ASCII字符(特别是<128)的字节,则该字节表示该ASCII字符。因此,您可以在+字符处拆分,就像您有一个单字节编码字符串一样。

在您的例子中,比较也是简单的字节比较。当你不得不担心规范形式或区分大小写时,情况就变得更加困难了,但据我所知,这两种方法都不适用于中文。(当然,您可能要将不同的字符视为相同的字符,例如気和氣。如果是的话,首先用标准的搜索和替换来规范字符串。)

票数 4
EN

Stack Overflow用户

发布于 2013-11-25 10:39:48

我和汉字一起工作了很多年,我不记得“在UTF-8中执行操作”。让我解释一下,UTF-8是编码的,它不应该在内存中进行操作.当UTF-8被发明的时候,我们的想法是英语是重要的语言,我们需要一些其他的方法,所以在UTF-8中,英语字符是一流的公民,不像中国人。

正如“编码”一词所暗示的,您必须对数据进行解码,然后才能使用它。这就像“对ZIP编码中的字符执行操作”。当然,如果您将文件加载到缓冲区中,您可以使用字符完成一些操作,但是您将以任何方式解码,要么解码整个缓冲区,然后执行操作,要么动态解码,一个字符一个字符,同时执行一些操作。

我所说的“解码”到底是什么意思?通常您将使用C类型的unsigned shortwchar_t,或者有时使用int来保存每个字符.因此,您将UTF-8文本加载到char utf8buffer[]缓冲区中,然后将其解码到另一个缓冲区wchar_t utf16buffer[]。然后你做你需要做的任何事情,然后你编码回UTF-8并保存到光盘。

如您所见,UTF16足以应付中文:

代码语言:javascript
运行
复制
 L'一' == 0x4e00; // first Chinese character "yi" - "one"
 L'龥' == 0x9fa9; // the last Chinese char that I know of.
                  // From 0xa000 the Korean alphabet (Hangul) starts.

但这只适用于普通汉语,只有学者在古代文献中才会用到一些不符合0xFFFF范围的文字。其实中文的“字母表”不是固定的,你可以把任何汉字的“词根”和字符组合成一个新的字符。这不是固定的!甚至还有一个UNICODE实用程序,它被称为表意描述序列"IDS“。但希望你一点也不需要。

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

https://stackoverflow.com/questions/20188716

复制
相关文章

相似问题

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