我編寫了一個擴展isalnum
以識別UTF-8編碼變音符號的函數。擴展'isalnum'以識別UTF-8變音符號
有沒有更好的方法來解決這個問題?
的代碼如下:
bool isalnumlaut(const char character) {
int cr = (int) (unsigned char) character;
if (isalnum(character)
|| cr == 195 // UTF-8
|| cr == 132 // Ä
|| cr == 164 // ä
|| cr == 150 // Ö
|| cr == 182 // ö
|| cr == 156 // Ü
|| cr == 188 // ü
|| cr == 159 // ß
) {
return true;
} else {
return false;
}
}
編輯:
我測試,現在我的解決方案几次,似乎做雖然我的目的的工作。任何強烈的反對意見?
UTF-8是一種Unicode編碼。 Unicode中有幾十個變音符號。尤其是,Unicode有一個「獨立的」unlaut,U + 0308。它爲前面的字符添加變音符號。即U + 0041 U + 0308是Ä。另外,爲什麼在該列表中?這沒有變音。 – MSalters
@ MSalters我認爲你的意思是結合,而不是「獨立」。 (正式的,這是一個「diaeresis」,而不是一個「變音符號」 - 「Umlaut」這個詞是指它在德語中對發音的影響。)Unicode既包含結合diaeresis也包含間隔diaeresis(U + 00A8),加上約80個「預先組合」的字符,使用分音功能。 ('grep DIAERESIS UnicodeData.txt'的結果。) –
@James:當然。但考慮到這個問題的措辭,我沒有使用正式的術語。順便說一下,你也可能在這個計數中包含了「低於」(U + 0324),以及預知的用途,例如我知道的MS U + 1E72 – MSalters