JavaScript中是否没有办法测试字符串并确定它是否是有效的UTF-8内容?

JavaScript中是否没有办法测试字符串并确定它是否是有效的UTF-8内容?,javascript,xml,encoding,utf-8,Javascript,Xml,Encoding,Utf 8,我知道我问过这个问题的一些变体,但我还没有找到答案 我正在从论坛数据库的内容创建UTF-8编码的XML。我使用的语言是服务器端JavaScript,它可以从NoSQL面向对象数据库中检索数据,我将从中生成XML输出 大多数数据库内容是UTF-8。但由于历史原因(该网站以前是ISO-8859-1),一些用户名(如André)和一些个人资料信息中带有重音符号或特殊字符,这些字符最初是在ISO-8859-1中编码的 如果我知道哪些内容是真正的ISO-8859-1,我可以在我的浏览器中手动编辑它们的配置

我知道我问过这个问题的一些变体,但我还没有找到答案

我正在从论坛数据库的内容创建UTF-8编码的XML。我使用的语言是服务器端JavaScript,它可以从NoSQL面向对象数据库中检索数据,我将从中生成XML输出

大多数数据库内容是UTF-8。但由于历史原因(该网站以前是ISO-8859-1),一些用户名(如André)和一些个人资料信息中带有重音符号或特殊字符,这些字符最初是在ISO-8859-1中编码的

如果我知道哪些内容是真正的ISO-8859-1,我可以在我的浏览器中手动编辑它们的配置文件(设置为UTF-8,因为页面的字符集现在是UTF-8),当我这样做时,新内容变成UTF-8

我可以看到之前和之后,因为如果我在UTF-8中首先查看用户的配置文件,它看起来有一个无效字符没有正确显示。但是如果我强制页面以ISO-8859-1显示,重音字符就会显示出来,如果我切换回UTF-8并编辑配置文件并查看,那么一切看起来都很好。因此,如果我能找到字符,我就能修复它们

问题是我不知道如何通过算法定位这些字符。一定有办法做到这一点,因为如果我尝试加载XML,我会创建我所有的浏览器:Chrome、Safari和FireFox不会加载XML内容并在某某行某某列报告“无效编码字符”

当这种情况发生时,如果我在Linux的vi中打开文件,我可以看到那里的无效字符,我可以看到它是谁的记录,我可以编辑此人的个人资料并重新生成XML

但是浏览器只报告错误的第一个实例,然后停止。所以我不得不一遍又一遍地做这件事,试图找出每一个错误

如果有某种方法可以使用JavaScript对字符进行测试,我可以首先检查整个数据库,并识别所有编码为UTF-8的无效字符

一定有,一定有某种方法。否则,浏览器本身如何才能报告错误

如果有人能告诉我一些JavaScript函数或方法,或者任何我可以用来自己检查字符并找到它们的东西,我将不胜感激,这样我就可以进去修复它们了

谢谢


doug

您不能将其作为字符加载到任何位置。您必须找到一种方法来读取原始字节,作为检查它们的字节。问题是,当您以字符形式读取任何内容时,存储编码将被解释为2字节Unicode字符,而您的“无效字符”消息就是从中产生的。我还没有做足够的Javascript来了解JS如何处理字节数组,但这正是我要开始寻找的地方。如果JS没有未解释的二进制“字节”类型,您可能必须使用类似Java的语言。我的服务器端JS版本有一个特殊的ByteBuffer类型,可以将数据作为原始字节检索和检查。在这种情况下,我是否可以使用JavaScript算法来检测字节序列是否是有效的UTF-8?对此,我别无选择,只能使用JavaScript。谢谢。如果你找不到一个JS UTF-8库可以满足你的需要,最好从这里开始(第3.9节)。如果您不想涉猎“standardese”,本文将对其进行更简洁的描述。编写一些检查字节流UTF-8有效性的简单代码并不难。如果您得到一个无效字符,请将其视为ISO-8859-1,并根据需要转换为Unicode。谢谢您的注释。我希望有人能给我指出这样一个JS UTF-8库。我一直找不到一个,作为一名程序员,我很懒,如果已经存在这样一个库,我宁愿不花很长时间重新发明轮子。有人知道吗?谢谢。这个网站上的推荐是离题的。请参阅和。你可以像我们一样使用谷歌。我找到了一大堆搜索结果。