indexOf() 对东方语言很着迷

问题描述

我有一串阿拉伯字符:

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

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

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

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

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

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

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

任何帮助将不胜感激。

解决方法

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

alert("یہ ایک جملہ ہے۔")

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...