【问题标题】:UTF-8 literal into actual symbolised stringUTF-8 文字转换为实际的符号化字符串
【发布时间】:2020-01-13 15:34:07
【问题描述】:

我马上要道歉,因为英语不是我的母语,如果“符号化字符串”或类似的东西实际上没有意义,我很抱歉。

我的情况:我正在使用 nodejs 读取 google 支持的设备 csv 文件 (https://support.google.com/googleplay/answer/1727131?hl=en),如下所示:
readFileSync(PATH, 'utf16le').split('\n');

其中一行看起来像Y6 \xe2\x85\xa1 Compact
\xe2\x85\xa1 是一个 UTF-8 字符串文字,它实际上代表 (罗马数字 2)(至少根据这个:https://www.utf8-chartable.de/unicode-utf8-table.pl?start=8448&number=128&utf8=string-literal&text=8545

当我尝试处理此字符串时,节点自动添加 \\ 使其成为 \\xe2\\x85\\xa1,因为 \x 不是有效字符等。

但是有什么方法可以让我真正得到罗马数字吗?

如果没有,任何关于轻松完全删除此类数据的建议(罗马数字更像是“拥有”而不是“必须”)

【问题讨论】:

  • 所以文件确实包含转义字符串?然后你必须解析它,例如JSON.parse

标签: javascript node.js encoding decoding


【解决方案1】:

大多数情况下,发布后基本上 5 分钟就想出了一个解决方案...

\xe2\x85\xa1
\x 替换为% =>
%e2%85%a1

decodeURIComponent()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent

UTF-8 文字基本上是 URI,但使用 % 而不是 \x
所以我们只需将其替换为
string.replace(/\\x/g, '%'); //g 即可捕获字符串中的所有实例
并将其作为 URI 解析回正确的字符串。

花一个多小时试图弄清楚这一点,发布问题并在 5 分钟内提出解决方案......什么是生命......

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 2015-06-30
    • 2013-03-02
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多