indexOf() 因东方语言而疯狂

indexOf() gone crazy with Eastern languages

我有一串阿拉伯字符:

var txt="یہ ایک جملہ ہے۔";

并且我想找到某个字符(例如ì)在这个字符串中的位置。

alert (txt.indexOf("ج"));

我尝试使用 txt.indexOf() 函数,但确实发生了一些奇怪的事情:如果我实时指定字符串(包括基本字符串和搜索字符串)(例如通过输入框或表单文本框) ) 然后它按预期工作。但是,当我将基本字符串的字符指定为硬编码 JavaScript 行时,一切都会变得一团糟。

当我 alert() 时,这些字符显示为一些奇怪的 ASCII 值(显示为 Ößùīñè 等)并且 indexOf 结果总是 returns -1(未找到)。最初我认为这是js文件编码的问题,以确保它支持扩展字符集。原来编码是 UTF-8,当我关闭然后重新打开文件时,字符在编辑器中显示得非常好。问题仅在使用 JavaScript.

处理它们时出现

我使用notepad++作为代码编辑软件

var txt="یہ ایک جملہ ہے۔";
console.log(txt.indexOf("ج"));

如有任何帮助,我们将不胜感激。

Notepad++ 有 5 种编码,正如我在评论中提到的,我已经认识到使用 PowerShell,默认的 UTF-8 并不适用于所有匈牙利语字符,并且UTF-8-BOM 是正确的。
我可以在 Chrome 中重现该问题,但不能在 Firefox 中使用以下内容(在桌面上,我没有检查其他设备):
保存alert("یہ ایک جملہ ہے۔")到5个不同编码并以编码命名的文件,然后保存

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src = "ANSI.js"></script>
<script src = "UCS2 BE BOM.js"></script>
<script src = "UCS2 LE BOM.js"></script>
<script src = "UTF-8.js"></script>
<script src = "UTF-8-BOM.js"></script>
</body>
</html>

到一个html文件打开可以看到UTF-8-BOM正确显示字符,UCS-2类型也是,而ANSI文件即使在Notepad++中也不能显示字符。
我建议您在设置 -> 首选项 -> 新文档中设置默认值。
关于当输入来自网站时会发生什么:我认为当浏览器创建元素时它正在控制它们的行为,并对字符进行编码以便它可以重现它们,所以没有编码“冲突”就像它即将到来一样来自文件并且已经编码。