![](/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.