我对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编码的字母吗?谢谢。
あいう
编码为%82%A0%82%A2%82%A4
作为字符集的Shift-JIS
。%E3%81%82%E3%81%84%E3%81%86
是转换为UTF-8
的结果。如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。
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
此脚本的流程如下。
あいう
的文本值放入Blob。那时,文本值将作为字符集的Shift-JIS
。blob.getDataAsString("Shift_JIS")
,结果仍为UTF-8
。因此,需要将blob用作二进制数据。这是此答案的重点。%
添加到每个字节的开头字符。如果我误解了你的问题,而这不是你想要的方向,我深表歉意。