在土耳其語中,有一個字母İ
,它是i
的大寫形式。當我將它轉換成小寫字母時,我會得到一個奇怪的結果。例如:「İ」.toLowerCase()!=「i」
var string_tr = "İ".toLowerCase();
var string_en = "i";
console.log(string_tr == string_en); // false
console.log(string_tr.split("")); // ["i", "̇"]
console.log(string_tr.charCodeAt(1)); // 775
console.log(string_en.charCodeAt(0)); // 105
"İ".toLowerCase()
返回多餘的字符,如果我沒有記錯,這是COMBINING DOT ABOVE (U+0307)。
我該如何擺脫這個角色?
我可以過濾字符串:
var string_tr = "İ".toLowerCase();
string_tr = string_tr.split("").filter(function (item) {
if (item.charCodeAt(0) != 775) {
return true;
}
}).join("");
console.log(string_tr.split(""));
,但我會正確地交給這個?有更好的方法嗎?此外,爲什麼這個額外的角色出現在第一位呢?
存在一些不一致。例如,在土耳其語中,有一個小寫形式的I
:ı
。爲什麼下面的比較返回true
console.log("ı".toUpperCase() == "i".toUpperCase()) // true
而
console.log("İ".toLowerCase() == "i") // false
返回false?
您是否嘗試過'String.toLocaleLowerCase()'? https://stackoverflow.com/questions/1850232/turkish-case-conversion-in-javascript –
你可以閱讀更多關於這裏:https://msdn.microsoft.com/en-us/library/ms973919.aspx# stringsinnet20_topic5 – JOSEFtw
@JOSEFtw我很好奇,爲什麼JS正確地轉換'「ı」.toUpperCase()',但不是'「İ」.toLowerCase()「'。 – akinuri