C 语言对 Unicode 友好吗?

2015-12-21 19:55:35 +08:00
 Feiox

最近需要高性能处理一些文本数据,多语言(有些还是 GBK 编码。。。

以前玩 C 的时候处理的不是二进制就是纯 ASCII ,所以不了解相关知识。
我项问一下,使用 C 语言处理 Utf-8 字符编码方便吗?(原谅我是 C++ 一生黑 ~)

# 另外,有没有用 Rust 对接 Python 的,会不会有些坑?(我只是好奇想尝试一下)

2777 次点击
所在节点    问与答
10 条回复
lianz
2015-12-21 20:06:07 +08:00
在 C 的世界里只有 bytes 数组,什么 UTF8 、 GBK 编码都是上层建筑,自己处理或者用第三方库处理。
huodon
2015-12-21 20:12:35 +08:00
用 icu4c ?
ffffwh
2015-12-21 20:22:47 +08:00
utf-8 、 gbk 这种变长的 char s[]直接放,但有非 ascii 的话 s[i]可不是第 i 个字符,第 i 个字符恐怕只能一个个解析。
utf-16 这种定长(似乎并不是,详不明)双字节的又是另一回事, wchar_t []或者 char []一次跳两个。
xufang
2015-12-21 20:30:27 +08:00
jhaohai
2015-12-21 20:51:46 +08:00
c 只认识 ansi
xufang
2015-12-21 20:53:43 +08:00
诸位大发宏论的之前,请先看下我的 #4 的连接,无意冒犯诸位哦,谢谢。
northisland
2015-12-21 21:06:42 +08:00
c 语言确实很高性能,
但也“烫烫烫烫烫”, 2333

楼主找到什么好库记得分享一下~
longaiwp
2015-12-21 23:30:23 +08:00
@xufang 你这个也是人家帮你实现了一下而已。。。算不得上友好吧
YuJianrong
2015-12-21 23:35:01 +08:00
@ffffwh utf-16 并不是定长的,和 utf-8 一样变长,所以也一样不能确切认为 s[i]就是地 i 个字符,所幸大部分使用的字符都在 BMP ( Basic Multilingual Plane ,基本多语言平面),这一区域的字符 utf-16 是两字节的。 BMP 之外主要是一些很不常用的汉字和其他语言以及表情符号等。

@xufang 这个基本没用,也就是 unicode 文本能写进源代码和几个简单的 API 而已。

直接说结论的话, C 语言处理 Utf-8 字符编码一点都不方便,不过其实如果你是需要高性能的话,也只有 C 语言这一个解决方案了吧,毕竟没有接近汇编的控制能力怎么写高性能的处理程序……
xufang
2015-12-22 00:10:56 +08:00
@YuJianrong 呵呵,我是针对一些对 C 语言有成见的观点才发这个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/245171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX