最近需要高性能处理一些文本数据,多语言(有些还是 GBK 编码。。。
以前玩 C 的时候处理的不是二进制就是纯 ASCII ,所以不了解相关知识。
我项问一下,使用 C 语言处理 Utf-8 字符编码方便吗?(原谅我是 C++ 一生黑 ~)
# 另外,有没有用 Rust 对接 Python 的,会不会有些坑?(我只是好奇想尝试一下)
1
lianz 2015-12-21 20:06:07 +08:00
在 C 的世界里只有 bytes 数组,什么 UTF8 、 GBK 编码都是上层建筑,自己处理或者用第三方库处理。
|
2
huodon 2015-12-21 20:12:35 +08:00
用 icu4c ?
|
3
ffffwh 2015-12-21 20:22:47 +08:00 via Android
utf-8 、 gbk 这种变长的 char s[]直接放,但有非 ascii 的话 s[i]可不是第 i 个字符,第 i 个字符恐怕只能一个个解析。
utf-16 这种定长(似乎并不是,详不明)双字节的又是另一回事, wchar_t []或者 char []一次跳两个。 |
4
xufang 2015-12-21 20:30:27 +08:00 1
|
5
jhaohai 2015-12-21 20:51:46 +08:00
c 只认识 ansi
|
6
xufang 2015-12-21 20:53:43 +08:00 1
诸位大发宏论的之前,请先看下我的 #4 的连接,无意冒犯诸位哦,谢谢。
|
7
northisland 2015-12-21 21:06:42 +08:00
c 语言确实很高性能,
但也“烫烫烫烫烫”, 2333 楼主找到什么好库记得分享一下~ |
9
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 语言这一个解决方案了吧,毕竟没有接近汇编的控制能力怎么写高性能的处理程序…… |
10
xufang 2015-12-22 00:10:56 +08:00
@YuJianrong 呵呵,我是针对一些对 C 语言有成见的观点才发这个。
|