使用C / C ++转义unicode字符

问题描述 投票:6回答:1

我需要将输入字符串中的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”。 ...

c++ unicode utf-16 utf-32
1个回答
16
投票

您的问题中有很多问题,我将尝试回答最重要的问题。

© www.soinside.com 2019 - 2024. All rights reserved.