我需要将输入字符串中的Unicode字符转义为UTF-16或UTF-32转义序列。例如,输入字符串文字"Eat, drink, 愛"
应该转义为"Eat, drink, \u611b"
。以下是排序表中的规则:
Escape | Unicode代码点
'\ u'十六进制十六进制十六进制| 一个Unicode代码点,范围为U + 0至U + FFFF包含,与编码的十六进制值相对应。
'\ U'十六进制十六进制十六进制十六进制十六进制十六进制十六进制| 范围内的Unicode代码点与编码的十六进制相对应的U + 0到U + 10FFFF(含)值。
一般来说,检测Unicode字符很简单,因为如果ASCII,第二个字节为0:
L"a" = 97, 0
,将无法转义。对于Unicode字符,第二个字节永远不会为0:
L"愛" = 27, 97
,以
\u611b
转义。但是,我如何检测UTF-32字符串,因为它与8个十六进制数字的UTF-16的逃逸方式不同?
它不像检查字符串的大小那样简单,因为UTF-16字符是多字节的,例如:
L"प्रे" = 42, 9, 77, 9, 48, 9, 71, 9
我的任务是转义非转义的输入字符串文字,例如
Eat, drink, 愛
并将它们以转义的文字格式Eat, drink, \u611b
存储到磁盘(UTF-16示例),如果我的程序找到UTF-32字符,它也应转义这些字符。形式\U8902611b
(以UTF-32为例),但是我找不到确定我要处理输入字节数组中的UTF-16还是UTF-32的某种方式。因此,如何才能可靠地将wchar_t
字符串或字节数组中的UTF-32字符与UTF-16字符区分开?
我需要将输入字符串中的Unicode字符转义为UTF-16或UTF-32转义序列。例如,输入字符串文字“ Eat,Drink,爱”应转义为“ Eat,Drink,\ u611b”。 ...
您的问题中有很多问题,我将尝试回答最重要的问题。