W języku tureckim znajduje się litera İ
, która jest wielką postacią z i
. Po konwersji na małe litery otrzymuję dziwny wynik. Na przykład:"İ" .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()
zwraca dodatkowy znak, a jeśli się nie mylę, to COMBINING DOT ABOVE (U+0307).
Jak mogę się pozbyć tej postaci?
może po prostu filtrować ciągu:
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(""));
ale ja wręczając to prawidłowo? Czy istnieje bardziej preferowany sposób? Co więcej, dlaczego ta dodatkowa postać pojawia się w pierwszej kolejności?
Istnieje pewna niekonsekwencja. Na przykład w języku tureckim istnieje mała forma I
: ı
. Jak to następujące porównanie zwraca true
console.log("ı".toUpperCase() == "i".toUpperCase()) // true
podczas
console.log("İ".toLowerCase() == "i") // false
zwraca fałsz?
próbowałeś 'String.toLocaleLowerCase()'? https://stackoverflow.com/questions/1850232/turkish-case-conversion-in-javascript –
Możesz przeczytać więcej na ten temat tutaj: https://msdn.microsoft.com/en-us/library/ms973919.aspx# stringsinnet20_topic5 – JOSEFtw
@JOSEFtw Jestem ciekawy, dlaczego JS konwertuje '" ı ".toUpperCase()' poprawnie, ale nie '" totoLowerCase() ". – akinuri