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

2019-06-06 10:36:28 +08:00
 praynise
请教大家,golang 确定一个 GBK 字符集的真实长度,除了先转成 UTF8 再通过 runeCountIoString 以外,还有啥可以不经过字符集转换的方法么?
GBK 转 UTF8 总怕会有些生僻字转换不成功导致识别错误的情况发生…
2544 次点击
所在节点    Go 编程语言
4 条回复
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
2019-06-06 11:14:42 +08:00
GBK 不是定长的么,除以 2 不就好了(
另外怎么可能 GBK 转 UTF8 不成功,unicode 肯定包括 GBK 所有字符。
BOYPT
2019-06-06 11:15:37 +08:00
不好意思没看 1 楼的~~打脸了~~
听 1 楼的吧!
7sDream
2019-06-06 11:15:55 +08:00
@7sDream #1 当然,这么做你得先保证你的字节流一定是有效的 GBK 串,因为 GBK 并不完整覆盖双字节的所有情况。

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

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

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

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

© 2021 V2EX