【发布时间】:2018-03-27 23:49:35
【问题描述】:
在土耳其语中,有一个字母İ,它是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
返回假?
【问题讨论】:
-
你试过
String.toLocaleLowerCase()吗? stackoverflow.com/questions/1850232/… -
您可以在这里阅读更多相关信息:msdn.microsoft.com/en-us/library/…
-
@JOSEFtw 我很好奇,为什么 JS 能正确转换
"ı".toUpperCase(),但不能正确转换"İ".toLowerCase()"。 -
@akinuri,因为
ı (U+0131)和i (U+0069)的映射相同:I (U+0049) -
@akinuri,它会为依赖这种行为的人破解一些代码。老实说,这并不是那么荒谬......在任何时候,这就是为什么 Unicode 为土耳其语添加了特殊的大小写。这就是为什么你需要使用
.toLocaleLowerCase
标签: javascript case-sensitive uppercase