Dou*_*ner 5 javascript utf-8 character-encoding
这是以前提出的问题的一种变体,但我仍然无法找到答案,所以我试图将其提炼到问题的核心,希望有一个解决方案。
我有一个数据库,由于历史原因,其中的某些文本条目不是 UTF-8。大多数是。过去 3 年的所有条目都是。但一些较旧的条目不是。
找到非 UTF-8 字符很重要,因此我可以避免它们或将它们转换为 UTF-8 以用于我尝试生成的某些 XML。
我使用的服务器端 JavaScript 具有 ByteBuffer 类型,因此我可以将任何字符集视为单个字节并根据需要检查它们,并且不需要使用 String 类型,我理解在这种情况下这是有问题的。
在这种情况下,是否有任何文本检查可以确定它是否是有效的 UTF-8?
我已经搜索了几个月 (;_;) 并且仍然无法找到答案。然而,必须有办法做到这一点,因为 XML 验证器(如在主要浏览器中)能够在遇到非 UTF-8 字符时报告“编码错误”。
我只想知道有关如何完成的任何算法,以便我可以尝试在 JavaScript 中进行相同类型的测试。一旦我知道哪些字符不好,我就可以将它们从 ISO-8859-1(例如)转换为 UTF-8。我有这方面的方法。
我只是不知道如何找出哪些字符不是 UTF-8。同样,我知道在这种情况下使用 JavaScript String 类型是有问题的,但我确实有一个替代的 ByteBuffer 类型,它可以按字节处理字符。
感谢人们可以建议的任何特定测试。
道格
小智 1
我有同样的情况和问题。所有服务器端 JavaScript 字符串都是 16 位,但如果我从端点获取 JSON,它可以是:UTF-8、ANSI (ASCII)、UCS2_BE、UCS2_LE。UTF16 自然会很好地转换为 JavaScript 16 位字符串,但 \xe2\x80\x99 是一个问题,因为可变长度字符编码会导致 AWS 中的 SQL 注入错误。然而,我使用的服务器端 JavaScript 会对 UTF-8 进行一些位移或填充,从而生成以\xc3\xaf\xc2\xbb\xc2\xbf \nThat\xe2\x80\x99s开头的 16 位 JavaScript 字符串,因为我在 JavaScript 中没有 \xe2\x80\x99t 有 8 位字符串,所以我只检查前 3 个字符\xc3\xaf\xc2\xbb\xc2\xbf
\n\n您可能在位移方面没有同样的运气,但下面的函数对我有用。我\xe2\x80\x99m确信有一个更好、更快的更好的解决方案,但这篇文章已经发布了2年,有715次浏览,但没有一个解决方案。
\n\n安德斯
\n\n只需调用它:
\n\nvar bolResult = isEncoded(strJSON);\n\n/**\n * @description Check if string is UTF8 encoded\n * @param {string} JSON\n * @returns {boolean} true/false\n */\nfunction isEncoded(strJSON) {\n /***************************\n * Valid string starts with:\n * \xc3\xaf\xc2\xbb\xc2\xbf{\n * 239, 187, 191\n ********************/\n var intCharCode0 = strJSON.charCodeAt(0); //239\n var intCharCode1 = strJSON.charCodeAt(1); //187\n var intCharCode2 = strJSON.charCodeAt(2); //191\n\n if(intCharCode0 === 239 && intCharCode1 === 187 && intCharCode2 === 191){\n return true;\n }\n else{\n return false;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |