为什么这个cfscript函数有效?

时间:2013-11-06 17:28:08

标签: coldfusion character-encoding cfml bluedragon

我写了这个函数,最后一行似乎错了*但它确实有效。有人可以解释这些东西是如何工作的吗?

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(decoding_string)

1 个答案:

答案 0 :(得分:4)

它似乎关闭的原因是您交换了变量名称,因此它们无法准确表示内容:

  • var e_ to = charsetObj.forName( from ); //原始编码

  • var e_ 来自 = 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();
}