- Вы хотите, чтобы URL кодировался от
あいう
до %82%A0%82%A2%82%A4
как Shift-JIS
набора символов. %E3%81%82%E3%81%84%E3%81%86
- результат, преобразованный в UTF-8
.
- Вы хотите добиться этого с помощью скрипта Google Apps.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Пункты этого ответа:
- Чтобы использовать
Shift-JIS
набора символов в Сценарии Google Apps, это требуется использовать его в качестве двоичных данных. Потому что, когда в скрипте Google Apps извлекается значение Shift-JIS
как строка, набор символов автоматически изменяется на UTF-8
. Пожалуйста, будьте осторожны.
Пример сценария 1:
Чтобы преобразовать из あいう
в %82%A0%82%A2%82%A4
, как насчет следующего сценария? В этом случае этот сценарий можно использовать для символов HIRAGANA.
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("").toUpperCase();
Logger.log(res)
}
Результат:
В журнале можно увидеть следующий результат.
%82%A0%82%A2%82%A4
Пример сценария 2:
Если вы хотите преобразовать значения, включая символы KANJI, как насчет следующего сценария? В этом случае 本日は晴天なり
преобразуется в %96%7B%93%FA%82%CD%90%B0%93V%82%C8%82%E8
.
function muFunction() {
var str = "本日は晴天なり";
var conv = Utilities.newBlob("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz*-.@_").getBytes().map(function(e) {return ("0" + (e & 0xFF).toString(16)).slice(-2)});
var bytes = Utilities.newBlob("").setDataFromString(str, "Shift_JIS").getBytes();
var res = bytes.map(function(byte) {
var n = ("0" + (byte & 0xFF).toString(16)).slice(-2);
return conv.indexOf(n) != -1 ? String.fromCharCode(parseInt(n[0], 16).toString(2).length == 4 ? parseInt(n, 16) - 256 : parseInt(n, 16)) : ("%" + n).toUpperCase();
}).join("");
Logger.log(res)
}
Результат:
В журнале можно увидеть следующий результат.
%96%7B%93%FA%82%CD%90%B0%93V%82%C8%82%E8
- Когда
本日は晴天なり
преобразуется с помощью образца сценария 1, становится как %96%7B%93%FA%82%CD%90%B0%93%56%82%C8%82%E8
. Это также может быть расшифровано. Но похоже, что обычно используется результирующее значение, преобразованное с помощью примера сценария 2.
Поток:
Ход этого сценария следующий:
- Создать новый BLOB-объект как пустые данные.
- Поместить текстовое значение
あいう
в BLOB-объект. В это время текстовое значение помещается как Shift-JIS
набора символов. - В этом случае, даже если используется
blob.getDataAsString("Shift_JIS")
, результат становится UTF-8
. Таким образом, блоб необходимо использовать в качестве двоичных данных без преобразования в строковые данные. Это важный момент в этом ответе.
- Преобразование большого двоичного объекта в массив байтов.
- Преобразование массива байтов шестнадцатеричного числа со знаком в шестнадцатеричное число без знака.
- В скрипте Google Apps используется байтовый массив с шестнадцатеричным знаком. Поэтому требуется преобразовать в шестнадцатеричное без знака.
- Когда значение является символом KANJI, когда символы из 2 байтов могут быть преобразованы в строковое значение как код ascii, строковое значение должно быть используемый. Сценарий «Пример сценария 2» может быть использован для этой ситуации.
- В приведенном выше примере
天
становится %93V
.
- Добавьте
%
к верхнему символу каждого байта.
Ссылки:
Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, я извиняться.