Почему эта функция cfscript работает?

Я написал эту функцию, последняя строка кажется неправильной *, но на самом деле она работает. Может кто-нибудь объяснить, как это работает?

function convertEncoding(str,from,to) {
    var charSetObj = createobject("java", "java.nio.charset.Charset");
    var e_to = charsetObj.forName(from);
    var e_from = charsetObj.forName(to);
    return e_from.decode(e_to.encode(str)).toString();
}

Я на BlueDragon 7 и 7.1JX (не с открытым исходным кодом)

Я был вдохновлен этой функцией: http://acoderslife.com/index.cfm/blog/Converting-Text-From-UTF-8-to-ISO-8859-1

* Похоже, что наше последнее действие - работа с кодировкой From. Это должен быть From.decode(string), а затем To.encode(decoded_string)

1 ответ

Решение

Причина, по которой это кажется неправильной, заключается в том, что вы меняли имена переменных, поэтому они не точно представляют содержимое:

  • var e_to = charsetObj.forName (from); // Оригинальная кодировка

  • var e_from = charsetObj.forName (to); // Новая кодировка

Это работает потому, что последний оператор объясняет это, меняя позиции переменных, так что, несмотря на их имена, код фактически делает это:

   return newEncoding.decode( originalEncoding.encode(str) ).toString();

Очевидно, что лучше всего исправить имена переменных, поэтому вы не почесываете голову, когда через шесть месяцев перебираете этот код.

function convertEncoding(str, from, to) {
    var charSetObj = createobject("java", "java.nio.charset.Charset");
    var origEncoding = charsetObj.forName( arguments.from );
    var newEncoding = charsetObj.forName( arguments.to );
    return newEncoding.decode(origEncoding.encode( arguments.str )).toString();
}
Другие вопросы по тегам