Почему эта функция 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();
}