V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
praynise
V2EX  ›  Go 编程语言

请教大家, golang 确定一个 GBK 字符集的真实长度,除了先转成 UTF8 再通过 runeCountIoString 以外,还有啥可以不经过字符集转换的方法么?

  •  
  •   praynise · 2019-06-06 10:36:28 +08:00 · 2549 次点击
    这是一个创建于 2030 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教大家,golang 确定一个 GBK 字符集的真实长度,除了先转成 UTF8 再通过 runeCountIoString 以外,还有啥可以不经过字符集转换的方法么?
    GBK 转 UTF8 总怕会有些生僻字转换不成功导致识别错误的情况发生…
    4 条回复    2019-06-06 11:15:55 +08:00
    7sDream
        1
    7sDream  
       2019-06-06 11:10:23 +08:00
    自己扫一遍应该也可以。

    GBK 是变长编码,ASCII 部分的字符一个字节,其他字符两个字节。所以看到 00-7F 之间的 byte 就 i++ c++,看到 80-FF 就 i+=2 c++

    参考: https://zh.wikipedia.org/wiki/%E6%B1%89%E5%AD%97%E5%86%85%E7%A0%81%E6%89%A9%E5%B1%95%E8%A7%84%E8%8C%83#%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F
    BOYPT
        2
    BOYPT  
       2019-06-06 11:14:42 +08:00
    GBK 不是定长的么,除以 2 不就好了(
    另外怎么可能 GBK 转 UTF8 不成功,unicode 肯定包括 GBK 所有字符。
    BOYPT
        3
    BOYPT  
       2019-06-06 11:15:37 +08:00
    不好意思没看 1 楼的~~打脸了~~
    听 1 楼的吧!
    7sDream
        4
    7sDream  
       2019-06-06 11:15:55 +08:00
    @7sDream #1 当然,这么做你得先保证你的字节流一定是有效的 GBK 串,因为 GBK 并不完整覆盖双字节的所有情况。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:33 · PVG 03:33 · LAX 11:33 · JFK 14:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.