英文:
How to convert "\\u0301" to "\u0301"
问题
我遇到的问题是:
给定一个包含多个特殊子字符串的字符串,如:
"\u0301" "\b" "\t"
,等等
请将上述所有特殊字符串转换为"\u0301","\b","\t"
,等等
请注意,如果只是在这里删除一个反斜杠,
你将得到一个"\u0301"
的纯文本,
而不是Unicode的重音符号。
逐个替换每个特殊字符串是一种解决方法:
str = strings.Replace(str, "\u0301","\u0301", -1)
是否有一种通用的解决方案适用于所有转义字符代码?
英文:
The problem that I met is that
Given a string contains several special substrings like:
"\\u0301" "\\b" "\\t"
,..etc
Please convert all special strings above into "\u0301","\b","\t"
, ..etc
Note that if just removing a backslash here,
you will get a plaintext of "\u0301"
,
instead an accent mark of Unicode.
A one-by-one solution is to replace each special string
str = strings.Replace(str, "\\u0301","\u0301", -1)
Is a general solution to all escape character codes?
答案1
得分: 1
如果您需要将包含转义的Unicode序列和控制序列的字节序列转换为Unicode字符串,您可以使用strconv.Unquote函数。
为此,将字节转换为字符串,对双引号和换行符进行转义,并在该字符串的开头和结尾添加双引号字符。
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
b := []byte{65, 92, 117, 48, 51, 48, 49, 9, 88, 10, 34, 65, 34}
// 与下面的代码等效
// b := []byte("A\\u0301\tX\n\"A\"")
// 转换为字符串
s := string(b)
fmt.Println(s)
fmt.Println("=========")
// 转义双引号
s = strings.ReplaceAll(s, "\"", "\\\"")
// 转义换行符
s = strings.ReplaceAll(s, "\n", "\\n")
r, err := strconv.Unquote(`"` + s + `"`)
if err != nil {
panic(err)
}
fmt.Println(r)
fmt.Println("=========")
}
输出:
A\u0301 X
"A"
=========
Á X
"A"
=========
https://go.dev/play/p/WRsNGOT1zLR
英文:
If you need to convert a byte sequence that contains escaped Unicode sequences and control sequences to a Unicode string, then you can use strconv.Unquote function.
To do this, convert the bytes to a string, escape the double-quote and newline characters, and add double-quote characters at the beginning and end of this string.
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
b := []byte{65, 92, 117, 48, 51, 48, 49, 9, 88, 10, 34, 65, 34}
// the same as
// b := []byte("A\\u0301\tX\n\"A\"")
// convert to string
s := string(b)
fmt.Println(s)
fmt.Println("=========")
// escape double quotes
s = strings.ReplaceAll(s, "\"", "\\\"")
// escape newlines
s = strings.ReplaceAll(s, "\n", "\\n")
r, err := strconv.Unquote(`"` + s + `"`)
if err != nil {
panic(err)
}
fmt.Println(r)
fmt.Println("=========")
}
Output:
A\u0301 X
"A"
=========
Á X
"A"
=========
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论