2013-11-06 2 views
2

Я написал эту функцию, последняя строка кажется неправильной *, но она на самом деле работает. Может кто-нибудь объяснить, как это работает?Почему эта функция 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.decode (строка), а затем To.encode (decoded_string)

ответ

4

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

  • var e_ до = charsetObj.forName (от); // Оригинальное кодирование

  • вар e_ от = charsetObj.forName (к); // Новое кодирование

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

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(); 
} 
+0

aaaaw как я мог пропустить это ... спасибо! что меня беспокоит, что на самом деле работает оригинальная функция (см. мою ссылку). Еще раз спасибо – niahoo

+0

О, право. Я не заметил его в первый раз, но имена переменных поменялись местами в блоге. Отсюда беспорядок! – Leigh