1

在我的 Go 项目中,我正在处理亚洲语言并且有双字节字符。就我而言,我有一个包含两个单词的字符串,并且它们之间有一个空格。

EG: こんにちは 世界

现在我需要检查该空间是否是双字节空间,如果是,我需要将其转换为单字节空间。

我已经搜索了很多,但我找不到这样做的方法。由于我想不出办法做到这一点,抱歉,我没有代码示例可在此处添加。

我是否需要遍历每个字符并使用其代码选择双字节空间并替换?我应该使用什么代码来识别双字节空间?

4

2 回答 2

2

只换?

package main

import (
    "fmt"
    "strings"
)

func main()  {
    fmt.Println(strings.Replace("こんにちは 世界", " ", " ", -1))
}

请注意,中的第二个参数Replace ,作为示例中字符串的复制粘贴。此替换函数将在原始字符串中找到所有匹配的符文并将其替换为 ASCII 空格

于 2021-10-02T09:59:04.873 回答
2

在 golang 中没有像双字节字符这样的东西。引擎盖下有特殊类型runeint32符文是 unicode 表示。

你的特殊空间是12288,普通空间是32unicode。

要遍历字符,您可以使用 range

for _, char := range chars {...} // char is rune type

要替换此字符,您可以使用strings.Replaceorstrings.Map并定义函数来替换不需要的字符。

func converter(r rune) rune {
    if r == 12288 {
        return 32
    }
    return r
}
result := strings.Map(converter, "こんにちは 世界")

也可以使用字符文字代替数字

if r == ' ' {
    return ' '
}
于 2021-10-02T12:41:41.293 回答