4

localeCompare()函数在 Firefox 扩展主代码和 web worker(或 chrome worker)中的行为不同。

例如,在主代码中,我有以下代码:

var array = ["École", "Frère", "frère", "école"];
array.sort(function(a, b) {
    return a.localeCompare(b);
});

console.log('Main: ' + array);

表明:

Main: �cole,�cole,Fr�re,fr�re

哪个是正确的排序(编码不是我的问题)。

在工人中,我有以下代码:

var array = ["École", "Frère", "frère", "école"];
array.sort(function(a, b) {
    return a.localeCompare(b);
});

self.postMessage(array);

它打印:

Frère,frère,école,�0cole

这是错误的顺序(再一次,编码不是我的问题)。

主代码中的排序是好的,但不是 web worker 中的排序。

我试图更改localeCompare()web worker 中函数的选项,但它并没有改变任何东西。

为什么 web worker 中的排序不同以及如何在 web worker 中正确排序?

(由于某种原因,我无法将数据发送到主代码,进行排序并将其发送回网络工作者。我仍然得到错误的顺序(给我école,�0cole,Frère,frère)。)

谢谢你的帮助。

4

1 回答 1

1

localeCompare在 Firefox Web Workers 中仍然存在问题。Wladimir 提到了 Bug 616841,它确实几乎在所有地方都修复了它......除了 web 工作者,因为 Intl 后端(是?)不是线程安全的或其他一些线程安全问题而被破坏。相应的“死胡同”补丁从未被审查或签入。

我现在提交了Bug 903780,并带有基于您的代码的测试用例,因此localeCompare希望将来能够修复。

于 2013-08-10T18:06:04.300 回答