将正常空间/空格转换为Golang中的不间断空格?

时间:2015-01-13 21:30:52

标签: unicode encoding character-encoding go unicode-string

这是一个简单的问题,但我仍然无法弄清楚如何去做。

说我有这个字符串:

x := "this string"

'this'和'string'之间的空格默认为常规 unicode空格字符32/U+0020。如何将其转换为Go中的非破坏 unicode空格字符U+00A0

2 个答案:

答案 0 :(得分:2)

使用该文档将标准strings包识别为可能的候选者,然后进行搜索(或通读全部,您应该知道任何语言的标准库/包中可用的内容)你用)找到strings.Map

然后,转换任何空格的明显简单的简单解决方案是:

package main

import (
    "fmt"
    "strings"
    "unicode"
)

func main() {
    const nbsp = '\u00A0'
    result := strings.Map(func(r rune) rune {
        if unicode.IsSpace(r) {
            return nbsp
        }
        return r
    }, "this string")

    fmt.Printf("%s → %[1]q\n", result)
}

Playground

如前所述,如果您真的只想替换" ",那么也许strings.Replace

答案 1 :(得分:-1)

我认为这样做的一个基本方法是创建一个简单的函数:

http://play.golang.org/p/YT8Cf917il

package main

import "fmt"

func ReplaceSpace(s string) string {
    var result []rune
    const badSpace = '\u0020'
    for _, r := range s {
        if r == badSpace {
            result = append(result, '\u00A0')
            continue
        }
        result = append(result, r)
    }
    return string(result)
}

func main() {
    fmt.Println(ReplaceSpace("this string"))
}

如果您需要更高级的操作,可以使用

创建一些东西
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"

阅读http://blog.golang.org/normalization了解有关如何使用它的更多信息