【问题标题】:How to convert a utf8 literal (ie '\u1F606') to a rune? (NOT GET THE UTF8 FROM THE RUNE!)如何将 utf8 文字(即 '\u1F606')转换为符文? (不要从符文中获取 UTF8!)
【发布时间】:2019-11-06 18:58:02
【问题描述】:

我正在尝试使用 utf8 十六进制代码生成连续字符。例如第一部分,我称之为“基本”代码:259 第二部分,我称之为“结束”代码:1(或、2、或 A、或 F 等)

这些以字符串的形式出现。一旦我附加结束代码并获得一个完整的字符串(即:259E),我如何将其转换为实际的 utf8 表示(或“字符”)

我不知道从哪里开始。我知道string(rune('\u259E') 会给我表示(▞),但我不知道如何将字符串作为(单引号)utf8 字符代码放入符文转换中。

package main

import "fmt"

func main() {
    s1 := "259"
    s2 := "E"
    s3 := "\\u"+s1+s2
    fmt.Println(s3)
    fmt.Println(string(rune('\u259E'))) 
}

期望的结果是我能够从生成的代码字符串表示中返回一个 utf8 字符(以及可能的代理对)。

总体要点(例如)是我希望字符串值“272A”返回为:✪

【问题讨论】:

  • \u1F606 是 UTF-32 代码点而不是 UTF-8。
  • 据我了解,这是一对替代品。但同样,我现在并不太关心支持“高阶”编码。请原谅我对 utf-8 与 utf-32 的细微差别的无知。
  • @bennowak \u1F606 不是代理对。这看起来像 \uD83D\uDE06

标签: string go utf-8 unicode-literals rune


【解决方案1】:

将十六进制值解析为 int32。

然后将该值转换为 println 中的 rune

package main

import "fmt"
import "strconv"

func main() {
    s1 := "259"
    s2 := "E"
    s3, err := strconv.ParseInt(s1+s2, 16, 32)
    fmt.Println(string(rune(s3)))
    fmt.Println(err)
}

【讨论】:

  • 你先生@Strom是一个宝石!非常感谢你让我在那里。请问你是在哪里挖的金子?或者你的思考过程是什么?帮助像我这样卑微的新手窥探伟大的深处,以便有一天我可以在同一个蜂蜜酒厅填满我的杯子?
  • 也适用于“高阶”代理!耶!
  • @bennowak 逻辑是: 1. 连接不起作用(转换在编译时完成(golang.org/ref/spec#Constant_expressions) 2. 将数字转换为 UTF-8 字符并将它们附加到字符串(哎呀,肯定有更好的办法)。3.runeint32(blog.golang.org/strings) 的别名,啊哈,rune 只是一个 Unicode 代码点。4.现在将十六进制字符串转换为编号 (golang.org/pkg/strconv/#ParseInt)。5. 将它们混合在一个大锅中,搅拌,品尝(呃...测试)。成功。
  • @bennowak “也适用于“高阶”[代码点]!Yipee!”:此代码适用于所有单字符代码点(包括表情符号)。必须进行修改以支持多代码点字形(显示的字符),其中最长的是英格兰、苏格兰和威尔士的国旗,有 7 个代码点,224 位!
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 2015-09-04
  • 2011-10-19
  • 2012-02-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多