【问题标题】:Convert normal space/whitespace to non-breaking space?将普通空格/空白转换为不间断空格?
【发布时间】:2015-03-11 23:36:56
【问题描述】:

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

假设我有这个字符串:

x := "this string"

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

【问题讨论】:

  • 突然投反对票?我不同意;我认为这是一个有用的问题,特别是因为我在 Google 上花了几个小时试图弄清楚但没有成功。

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


【解决方案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了解更多关于如何使用它的信息

【讨论】:

【解决方案2】:

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

那么转换任何空白的明显简短的简单解决方案是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2017-09-24
    • 2023-04-06
    相关资源
    最近更新 更多