Feiox
V2EX  ›  问与答

C 语言对 Unicode 友好吗?

  •  
  •   Feiox · Dec 21, 2015 · 3467 views
    This topic created in 3820 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    直接说结论的话, C 语言处理 Utf-8 字符编码一点都不方便,不过其实如果你是需要高性能的话,也只有 C 语言这一个解决方案了吧,毕竟没有接近汇编的控制能力怎么写高性能的处理程序……
    xufang
        10
    xufang  
       Dec 22, 2015
    @YuJianrong 呵呵,我是针对一些对 C 语言有成见的观点才发这个。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   931 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 22:46 · PVG 06:46 · LAX 15:46 · JFK 18:46
    ♥ Do have faith in what you're doing.