![](/img/trans.png)
[英]How to replace/ignore invalid Unicode/UTF8 characters � from C stdio.h getline()?
[英]How to convert Unicode escaped characters to utf8?
我看到了关于这个主题的其他问题但是所有这些问题都缺少重要的细节:我想将\%2F\%2F\מ\ר\כ\ז
为utf8。 我知道你通过流查看\\ u后跟四个十六进制转换为字节。 问题如下:
\%2F
4或6个字节? \%
的情况下,这映射到一个字节而不是两个(0x25),为什么? 是否应该将四个十六进制表示为utf16,我应该将其转换为utf8? \%
或unicode的序列? 这是否意味着必须在流中转义所有反斜杠? 如果您有iconv
接口\ģ\ꯍ
,您只需将\ģ\ꯍ
等序列转换为字节数组01 23 AB CD
...,用00字节后跟ASCII字节替换任何未转义的ASCII字符,然后通过iconv
运行数组,其中转换描述符由iconv_open("UTF-8", "UTF-16-BE")
。
当然,您也可以更高效地直接使用输入,但这需要阅读并理解UTF-16和UTF-8的Unicode规范。
在某些约定(如C ++ 11字符串文字)中,您解析特定数量的十六进制数字,例如
\\u\u003c/code>之后的四位数和
\\U
之后的八位数字。 这可能是也可能不是您提供的输入的约定,但似乎是一个合理的猜测。 其他样式,比如C ++的
\\x
你可以解析在\\x
之后可以找到的十六进制数字,这意味着如果你想在其中一个转义字符之后立即输入一个字母十六进制数字,你必须跳过一些箍。
获得所有值后,您需要知道它们所处的编码(例如,UTF-16或UTF-32)以及您想要的编码(例如,UTF-8)。 然后,您可以使用函数在新编码中创建新字符串。 您可以编写这样的函数(如果您对两种编码格式都了解得足够多),或者您可以使用库。 某些操作系统可能提供此类功能,但您可能希望使用第三方库来实现可移植性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.