Locale string comparison does not work properly in Firefox extension web worker

回眸只為那壹抹淺笑 提交于 2019-12-22 07:58:35

问题


The localeCompare() function does not behave the same in a Firefox extension main code and in a web worker (or chrome worker).

For instance, in the main code, I have this code:

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

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

it shows:

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

Which is the right sorting (the encoding is not my problem).

In the worker, I have this code:

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

self.postMessage(array);

it prints:

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

which is in the wrong order (once again, the encoding is not my problem).

The sorting in the main code is ok, but not the one in the web worker.

I tried to change the options of the localeCompare() function in the web worker, but it does not change anything.

Why is the sorting different in the web worker and how to get it right in the web worker?

(For some reason, I could not send the data to the main code, do the sorting and send it back to the web worker. I still got the wrong order (gives me école,�0cole,Frère,frère).)

Thanks for your help.


回答1:


localeCompare is still broken in Firefox Web Workers. Wladimir mentioned Bug 616841, which indeed fixed it almost everywhere... except for web workers, which were left broken because the Intl backend was (is?) not thread-safe, or some other thread-safety issues. The corresponding "Dead end" patch was never reviewed nor checked in.

I now filed Bug 903780, with a test case based on your code, so that localeCompare hopefully will be fixed in the future.



来源:https://stackoverflow.com/questions/16550774/locale-string-comparison-does-not-work-properly-in-firefox-extension-web-worker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!