如何将字符串转换为符文?

问题描述 投票:0回答:2

这是我的代码片段:

var converter = map[rune]rune {//some data}

sample := "⌘こんにちは"

var tmp string

for _, runeValue := range sample {
        fmt.Printf("%+q", runeValue)
        tmp = fmt.Sprintf("%+q", runeValue)
    }

fmt.Printf("%+q", runeValue)
的输出为:

'\u2318'
'\u3053'
'\u3093'
'\u306b'
'\u3061'
'\u306f'

这些值实际上是符文,但由于

Sprintf
的返回类型是字符串,我无法在我的地图
[rune]rune
中使用它。 我想知道如何将字符串转换为符文,或者换句话说,我该如何处理这个问题?

string go character-encoding rune
2个回答
10
投票

将字符串转换为符文切片:

runeArray := []rune("пример")


9
投票

A

string
不是单个
rune
,它可能包含多个
runes
。您可以使用简单类型 conversion
string
转换为包含所有符文的
[]runes
,例如
[]rune(sample)

for range
迭代
string
的符文,因此在您的示例中
runeValue
属于
rune
类型,您可以在
converter
地图中使用它,例如:

var converter = map[rune]rune{}
sample := "⌘こんにちは"
for _, runeValue := range sample {
    converter[runeValue] = runeValue
}
fmt.Println(converter)

但是由于

rune
int32
的别名,因此打印上面的
converter
地图将打印整数,输出将是:

map[8984:8984 12371:12371 12385:12385 12395:12395 12399:12399 12435:12435]

如果要打印字符,请使用

%c
fmt.Printf()
动词:

fmt.Printf("%c\n", converter)

将输出:

map[⌘:⌘ こ:こ ち:ち に:に は:は ん:ん]

尝试 Go Playground 上的示例。

如果您想替换(切换)

string
中的某些符文,请使用
strings.Map()
函数,例如:

sample := "⌘こんにちは"

result := strings.Map(func(r rune) rune {
    if r == '⌘' {
        return 'a'
    }
    if r == 'こ' {
        return 'b'
    }
    return r
}, sample)

fmt.Println(result)

哪个输出(在Go Playground上尝试一下):

abんにちは

如果您想要由

converter
地图定义的替换:

var converter = map[rune]rune{
    '⌘': 'a',
    'こ': 'b',
}
sample := "⌘こんにちは"

result := strings.Map(func(r rune) rune {
    if c, ok := converter[r]; ok {
        return c
    }
    return r
}, sample)

fmt.Println(result)

这输出相同。在 Go Playground 上尝试一下这个。

© www.soinside.com 2019 - 2024. All rights reserved.