当前位置: 首页 > 知识库问答 >
问题:

使用字符集在linux和windows上获得不同的结果。UTF-7的forName

柴阳云
2023-03-14

代码

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;
    }
} 

当Charset.forName(name)的name为UTF-7时发生问题;

在我的Linux平台上,我总是得到非法的CharsetNameException。

但在我的windows平台上看起来还可以。

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

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

我不知道如何修复它...

非常感谢。

共有2个答案

郭翰翮
2023-03-14

@RamonBoza发现了与此相关的最终“Bug”数据库条目。

它实际上是一个RFE,要求将UTF-7支持作为一个核心特性添加;i、 e.在所有平台上。

它已用“不会修复”的闭包代码关闭。这意味着问题尚未解决,将来可能也不会解决。

RFE评论指出,您应该寻求第三方通过标准字符集API/SPI添加UTF-7支持。google应该找到一个合适的实现;e、 g.你可以试试这个开源软件:http://www.freeutils.net/source/jcharset/

是否将这种不一致性称为“bug”取决于您,但我将其称为特性。Java文档没有公布受支持的UTF-7。

谭泳
2023-03-14

这是java中的一个bug,您对此无能为力

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

看来是解决了但我没信心

 类似资料:
  • 我有一个struct类型的对象数组 现在我想要一个数组,其中每个对象数组的所有元素组成如下所示: 结果: 紧凑型:[[1,2][1,2][1,2][1,2]]扁平:[1,2,1,2,1,2] 由于平面图在Swift 4.1中已弃用,我尝试使用compactMap,但它给出了数组数组而不是单个数组。 如何通过compactMap实现,就像我通过flatMap实现一样。

  • 问题内容: 目前,我正在尝试以mime格式读取文件,该文件具有png的一些二进制字符串数据。 在Windows中,读取文件会为我提供正确的二进制字符串,这意味着我只需将字符串复制过来并将扩展名更改为png即可看到图片。 在Windows中读取文件后的示例如下: 等…等… 在Linux中读取文件后的示例如下: 等…等… 我无法将Linux版本转换为图片,因为这一切都变成了一些带有许多颠倒的“?”的时

  • 问题内容: 为什么以下显示在Linux和Windows中有所不同? 在Windows中: ¿ 在Linux中: 一个 问题答案: System.out.println()以系统默认编码输出文本,但是控制台根据其自身的编码(或“代码页”)设置解释该输出。在Windows机器上,这两种编码似乎匹配,但是在Linux机器上,输出显然是以UTF-8格式输出的,而控制台将其解码为ISO-8859-1之类的单

  • 问题内容: 我最近开始在同一台PC上使用Windows和Linux- 它们安装在两个不同的分区中,第三个分区包含公用数据和存档。从Windows创建的virtualenvs使用文件夹“ Scripts”创建,而Linux中的对应文件是文件夹“ bin”。 这里的问题是这些文件夹中的文件不适用于两个操作系统。例如,bin(在Linux中创建)中包含的“激活”不在Windows中运行,另一方面,在Wi

  • 我们有一个内部开发的基于客户机/服务器的应用程序。客户端和服务器通过TCP/IP连接与特定于应用程序的协议进行通信。客户端在Windows上运行,服务器在Linux上运行。所有计算机都位于相同的Active Directory/Kerberos域/领域中。 目前,用户在启动应用程序时输入用户名和密码。服务器检查用户名和密码(身份验证)。服务器还根据用户名确定对资源的访问(授权)。 我们希望向应用程

  • 问题内容: 为什么当我使用以下操作对字符求和时,它返回数字而不是字符?它不应该给出相同的结果吗? 下面的代码复制了字符: doubleChar(“ The”)→“ TThhee” 问题答案: 以下表达式的结果 是String连接的结果。Java语言规范说明 字符串串联的结果是对String对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。 的