【问题标题】:JS backslash escape char being converted to non-escaping character by Shift JISJS 反斜杠转义字符被 Shift JIS 转换为非转义字符
【发布时间】:2013-04-26 13:20:55
【问题描述】:

我目前正在开发一个有两个版本的网站,一个是 utf-8 的美国网站,一个是 Shift JIS 的日本网站。该站点是使用 Perl 生成的。

问题:

我正在提供类似于以下内容的 Javascript。

var text = "test \"quote\"";

在日语网站上,它返回错误“Uncaught SyntaxError: Unexpected identifier”。这是因为反斜杠被转换为加长的反斜杠字符 \,它不被视为转义字符,因此会换行。

我似乎找不到其他人遇到这个问题,这让我怀疑我们的网站根本没有问题。有没有人遇到过类似的情况并找到了解决办法?

非常感谢

【问题讨论】:

  • 没有你的 Perl 代码是不可能帮助你的。
  • 那行是原始 JS,作为嵌入在其他几千行代码中的 Mason 模板的一部分。
  • 您至少应该向我们展示执行编码的代码部分。如果它是由 Mason 完成的,请向我们展示您如何设置 Mason 来完成它。
  • 我没有所有权或访问权限,我意识到这并不是特别有用,但唯一相关的部分是它在 shift JIS 中编码。我将使用我发现的 hack 来更新它。感谢阅读!

标签: javascript perl utf-8 shift-jis


【解决方案1】:

我在这里找到了一些有用的信息:

Why browser is showing different back slash for a email validation regex. How to prevent that?

这让我想到了这个令人不安的黑客:

var text = "test ¥"quote¥"";

这非常有效。现在,显然这不是这样做的方法,但它将使其他开发人员能够继续测试网站上的其他 JS 交互,而我则专注于将这段代码重构为不依赖字符转义的东西。我希望这些信息在某些时候对其他人有所帮助!

【讨论】:

  • 我也遇到过同样的事情,但是在相反的方向上,Shift_JIS 编码的 Simulink 文件中的“\”变成了“¥”,最常见的是“\n”变成了“¥ n" (这是文字 \n 而不是换行符,尽管如果不是“转换”,它会被 Simulink 解释为这样)。这发生在我使用 iconv -f shift_jis -t utf8 <filename> 的情况下。
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多