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

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

例子:

  "イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス".toUpperCase()
> "イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス"

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

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

最佳答案

你能指望什么?

JavaScript 的 toUpperCase() 方法应该使用 Unicode 标准定义的“语言环境不变大写映射”。所以,基本上,"i".toUpperCase() 在所有情况下都应该是 I。在语言环境不变的大写字母映射由多个字母组成的情况下,大多数浏览器不会正确将它们大写,例如"ß".toUpperCase()通常不是SS

此外,有些地区的大写规则与世界其他地区不同,最显着的例子是土耳其语,其中 i 的大写版本是 İ(反之亦然),I 的小写版本是 ı(反之亦然) .

如果您想要这种行为,您将需要一个设置为土耳其语区域设置的浏览器,并且您必须使用 toLocaleUpperCase() 方法。

另请注意,某些书写系统具有第三种情况,即“标题大小写”,当您要对单词的首字母大写时,将其应用于单词的第一个字母。这也由 Unicode 标准定义(例如,连字 nj 的 Title 大小写是 Nj 而大写是 NJ ),但是(据我所知)JavaScript 不可用。因此,如果您尝试使用 substringtoUpperCase 将单词大写,那么在极少数情况下它会出错。

关于javascript - Javascript 的 toUpperCase() 语言安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30762886/

10-09 18:03