如何在JavaScript中生成Shift_JIS(SJIS)百分比编码的字符串

问题描述 投票:0回答:1

我对JavaScript和Google Apps脚本都是陌生的,在将单元格中写入的文本转换为Shift-JIS(SJIS)编码的字母时遇到问题。例如,日语字符串“あいう”应编码为“%82%A0%82%A2%82%A4”,而不应编码为“%E3%81%82%E3%81%84%E3%81%86”是UTF-8编码的。

我尝试了EncodingJS和内置的urlencode()函数,但它们都返回了UTF-8编码的一个。

有人会告诉我如何在GAS中正确获取SJIS编码的字母吗?谢谢。

javascript google-apps-script encoding character-encoding urlencode
1个回答
0
投票
  • 您想要将URL从あいう编码为%82%A0%82%A2%82%A4作为字符集的Shift-JIS
    • [%E3%81%82%E3%81%84%E3%81%86是转换为UTF-8的结果。
  • 您想使用Google Apps脚本来实现。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

此要点:

  • 为了使用Google Apps脚本中字符集的Shift-JIS,必须将其用作二进制数据。因为,当Google Apps脚本将Shift-JIS的值检索为字符串时,字符集会自动更改为UTF-8。请注意这一点。

示例脚本:

为了从あいう转换为%82%A0%82%A2%82%A4,下面的脚本怎么样?

function muFunction() {
  var str = "あいう";

  var bytes = Utilities.newBlob("").setDataFromString(str, "Shift_JIS").getBytes();
  var res = bytes.map(function(byte) {return "%" + ("0" + (byte & 0xFF).toString(16)).slice(-2)}).join("");
  Logger.log(res)
}
结果:

您可以在日志中看到以下结果。

%82%a0%82%a2%82%a4

流量:

此脚本的流程如下。

  1. 创建新的blob作为空数据。
  2. あいう的文本值放入Blob。那时,文本值将作为字符集的Shift-JIS
    • 在这种情况下,即使使用blob.getDataAsString("Shift_JIS"),结果仍为UTF-8。因此,需要将blob用作二进制数据。这是此答案的重点。
  3. 将blob转换为字节数组。
  4. 将有符号十六进制的字节数组转换为无符号十六进制。
    • 在Google Apps脚本中,字节数组使用的是他的十六进制符号。因此需要转换为无符号十六进制。
  5. %添加到每个字节的开头字符。

参考:

如果我误解了你的问题,而这不是你想要的方向,我深表歉意。

© www.soinside.com 2019 - 2024. All rights reserved.