2

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

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)

4

1 回答 1

4

看起来不对的原因是你交换了变量名,所以它们不能准确地表示内容:

  • 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();
}
于 2013-11-06T17:56:00.007 回答