[英]C++ Saving file with unicode name problem - How to save UTF-8 filenames correctly in a crossplatform manner?
[英]How to correctly skip unicode (UTF-8) characters?
我編寫了一個解析器,結果證明它無法正確處理 UTF-8 文本。
解析器非常非常簡單:
while(pos < end) {
// find some ASCII char
if (text.at(pos) == '@') {
// Check some conditions and if the syntax is wrong...
if (...)
createDiagnostic(pos);
}
pos++;
}
所以你可以看到我正在pos
創建一個診斷。 但是,如果有一些 UTF-8 字符(因為 UTF-8 字符實際上包含多個char
。我如何正確跳過 UTF-8 字符,如果它們是一個字符?
我需要這個,因為診斷被發送到支持 UTF-8 的 VSCode。
我試圖在 C++ 中閱讀有關 UTF-8 的一些文章,但我發現的每一個材料都是巨大的。 我只需要跳過 UTF-8。
如果代碼點小於 128,則 UTF-8 將其編碼為 ASCII(未設置最高位)。 如果代碼點等於或大於 128,則所有編碼字節都將設置最高位。 因此,這將起作用:
unsigned char b = <...>; // b is a byte from a utf-8 string
if (b&0x80) {
// ignore it, as b is part of a >=128 codepoint
} else {
// use b as an ASCII code
}
注意:如果要計算字符串中 UTF-8 代碼點的數量,則必須計算字節數:
!(b&0x80)
:這意味着該字節是一個 ASCII 字符,或者(b&0xc0)==0xc0
:這意味着,該字節是多字節 UTF8 序列的第一個字節
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.