将Unicode转换为“ java

我在字符转换方面遇到问题。全部以以下字符串开头:A2 [,1] [,2] [1,] 4 -2 [2,] 8 -3 [3,] 6 1 [4,] 2 2 [5,] -1 1 。根据{{​​3}},此字符串现在(几乎)以U+1F618表示法。

但是我需要将此字符转换为HTML Entity (hex)表示法。我真的不知道这是该符号的正式名称,但我认为此网站是正确的:)。

所以基本上我的问题是,如何输出C/C++/Java source code而不是真正的表情符号?

\uD83D\uDE18
shuojie 回答:将Unicode转换为“ java

如果您输入的内容为string,例如

s := "\\U0001f618"

您可以使用strconv.Unquote()取消引用。确保传递给它的字符串带引号(必须用反引号或双引号引起来):

s2,err := strconv.Unquote(`"` + s + `"`)
fmt.Println(s2,err)

这将为您提供一个包含表情符号的s2字符串:

? <nil>

Java的字符串模型是一个char[],其中包含UTF-16 code points。 Go的string内存模型是UTF-8编码的字节序列。

要将Go字符串转换为UTF-16,可以使用标准库的unicode/utf16包。例如,utf16.Encode()将一系列rune(unicode码点)编码为UTF-16。您可以从Go string中获得一系列符文,其类型简单为conversion[]rune("some string")

u16 := utf16.Encode([]rune(s2))
fmt.Printf("%X\n",u16)

上面以十六进制格式打印UTF16代码点:

[D83D DE18]

要获取所需的格式,请使用以下循环:

buf := &strings.Builder{}
for _,v := range u16 {
    fmt.Fprintf(buf,"\\u%X",v)
}
fmt.Println(buf.String())

哪个输出:

\uD83D\uDE18

Go Playground上尝试示例。

您可以在函数中捕获这一系列转换:

func convert(s string) (string,error) {
    s2,err := strconv.Unquote(`"` + s + `"`)
    if err != nil {
        return "",err
    }

    buf := &strings.Builder{}
    for _,v := range utf16.Encode([]rune(s2)) {
        fmt.Fprintf(buf,v)
    }
    return buf.String(),nil
}

使用它:

fmt.Println(convert("\\U0001f618"))

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

\uD83D\uDE18 <nil>
本文链接:https://www.f2er.com/3095507.html

大家都在问