Javascript的toUpperCase()语言是否安全?

con*_*exo 5 javascript string

Javascript的String原型方法toUpperCase()是否会在每个支持UTF-8的语言/字符集中提供自然预期的结果?

我已经尝试过简体中文,韩文,泰米尔语,日语和西里尔语,到目前为止结果似乎合理.我可以依赖语言安全的方法吗?

例:

  "???????????????????????????????????????????????".toUpperCase()
> "???????????????????????????????????????????????"
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Quentin指出的,还有一个String.prototype.toLocaleUpperCase()甚至可能"更安全"使用,但我还必须支持IE 8及更高版本,以及基于Webkit的浏览器.由于它是ECMAScript 3 Standard的一部分,它应该可以在所有这些浏览器上使用,对吧?

有谁知道使用它会产生自然意外结果的任何情况?

mih*_*ihi 7

你能指望什么?

JavaScript的toUpperCase()方法应该使用Unicode标准定义的"区域设置不变大写映射".因此,基本上"i".toUpperCase()应该是I在所有情况下.在区域设置不变大写映射由多个字母组成的情况下,大多数浏览器不会正确地大写它们,例如"ß".toUpperCase()通常不是SS.

此外,还有一些语言环境具有与世界其他地方不同的大写规则,最值得注意的例子是土耳其语,其中大写版本i?(反之亦然),小写版本I?(反之亦然).

如果您想要这种行为,则需要一个设置为土耳其语语言环境的浏览器,并且您必须使用该toLocaleUpperCase()方法.

另请注意,某些书写系统有第三种情况,即"标题案例",当您想要"大写"它时,它应用于单词的第一个字母.这也是由Unicode标准定义的(例如,连字的Title情况??大写的?),但是(据我所知)JavaScript不可用.因此,如果您尝试使用substring和大写单词toUpperCase,则在极少数情况下会出现错误.