在 Python3 中,所有的字符串都是 Unicode,所以你只需要在进行 I/O 操作时进行解码或编码,而在你的代码的主要部分,你只使用 Unicode。
所以,我想知道在 Go 中,我应该这样做吗?我应该将所有字符串转换[]rune
为输入并且我的所有函数都只接收[]rune
类型吗?
因为我是 Go 新手,所以我不知道有多少 3rd 方库支持符文作为字符串。如果我在代码中一直使用 rune,当我需要与 3rd 方库交互时,将 rune 转换为字符串的开销是否会成为问题?
除了做 I/O 之外,我应该总是使用符文而不是字符串吗
有几个非常有用的包可以处理字符串,如果您的数据位于符文数组(或切片)中,您会发现使用这些包很尴尬。
在很多情况下,我必须在索引处获取字符,
一般来说,这样做是不安全的,部分原因是组合字符,但也因为字符串(或一般的 Unicode 文本)可能包含许多其他困难情况 - 可能是从左到右和从右到左文本的混合等等
将文本规范化为几种正常形式之一可能有助于处理大多数组合字符,但会有一些组合不会简化为单个符文。
我正在编写类似解析器的东西来解析带有表情符号的文本
Unicode表情符号只是另一个代码点 - 因此可以像大多数普通字符一样对待。
在许多情况下,最好使用range
运算符遍历字符串。
例如,如果您想用 替换所有内容:-)
,则可以使用strings.Replace()
或使用for ... range
with来处理strings.Builder
。
对我来说,最有说服力的论点是,一旦你在 ASCII 之外冒险,文本就会很奇怪,Unicode 几乎是深不可测的奇怪,最好留给那些一生都在与它的疯狂作斗争的专家。如果您想将时间花在通常对您、您的企业和客户更重要的业务端功能上,请使用标准包。
有用的参考资料: