使用Charset.forName作为UTF-7,在linux和windows上获得不同的结果

时间:2013-10-11 07:23:39

标签: java linux windows

代码:

import java.nio.charset.Charset;

public static Charset lookup(final String name) {
    if (name == null) {
        return null;
    }
    try {
        Charset charset = Charset.forName(name); 
        if (charset != null) {
            Charset superset = map.get(charset);
            if (superset != null) {
                charset = superset;
            }
        }
        return charset;
    } catch (IllegalCharsetNameException ex) {
        log.warn("Exception caught", ex);
        return null;
    } catch (UnsupportedCharsetException ex) {
        return null;
    }
} 

问题发生在' name'是" UTF-7" for Charset.forName(name);

我总是在My Linux平台上获得IllegalCharsetNameException。

但它在我的Windows平台上看起来还不错。

两个平台具有相同的源代码和java版本

java version" 1.7.0_17" Java(TM)SE运行时环境(版本1.7.0_17-b02) Java HotSpot(TM)64位服务器VM(内置23.7-b01,混合模式)

我不知道如何解决它..

谢谢!!

2 个答案:

答案 0 :(得分:1)

这是java中的一个错误,你无法做很多事情

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4304013

似乎已经解决但我对它没有信心

答案 1 :(得分:0)

@RamonBoza找到了与此相关的权威“Bug”数据库条目。

它实际上是一个RFE,要求添加UTF-7支持作为核心功能;即在所有平台上。

已使用“无法修复”的闭包代码关闭。这意味着问题尚未已解决,可能不会在将来发生。

RFE评论表明,您应该通过标准字符集API / SPI向第三方寻求添加UTF-7支持。谷歌搜索应找到合适的实施方案;例如你可以尝试这个开源的:http://www.freeutils.net/source/jcharset/


你是否将这种不一致称为“错误”取决于你,但我称之为功能。 Java文档不会将UTF-7宣传为支持。