将普通 space/whitespace 转换为不间断 space?

Convert normal space/whitespace to non-breaking space?

这是一个简单的问题,但我仍然不知道该怎么做。

假设我有这个字符串:

x := "this string"

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

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

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 了解有关如何使用它的更多信息

使用文档将标准 strings 包确定为可能的候选者,然后对其进行搜索(或通读所有内容,您应该知道任何语言的标准 library/packages 中可用的内容你使用) 来查找 strings.Map.

那么将 any 转换为白色 space 的明显简短解决方案是:

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.