トルコ語には、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
:_ı
_です。次の比較が真になる理由
console.log( "ı".toUpperCase() == "i".toUpperCase() ) // true
ながら
console.log( "İ".toLowerCase() == "i" ) // false
falseを返しますか?
String#toLocaleLowerCase
で利用可能なトルコ固有の大文字小文字変換が必要になります。
let s = "İ";
console.log(s.toLowerCase().length);
console.log(s.toLocaleLowerCase('tr-TR').length);
LocalLowerCaseまたはLocalUpperCaseは、トルコ語や、アゼルバイジャン語、カザフ語、タタール語、クリミアタタール語などのドット付きとドットなしのiバージョンのアルファベットのような言語に使用できます。
var string_tr = "İ".toLocalLowerCase();
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