首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java8 FileSystems.getDefault抛掷UnsupportedCharsetException

Java8 FileSystems.getDefault抛掷UnsupportedCharsetException
EN

Stack Overflow用户
提问于 2016-03-31 10:44:54
回答 2查看 1.1K关注 0票数 2

我有一个非常简单的代码:

代码语言:javascript
复制
public static void main(String[] arg){
    FileSystems.getDefault();
}

它在Java7中运行良好

但是将UnsupportedCharsetException: GBK抛到java8中,完整堆栈如下所示:

代码语言:javascript
复制
Exception in thread "main" java.lang.ExceptionInInitializerError
    at sun.nio.fs.WindowsFileSystem.<init>(WindowsFileSystem.java:67)
    at sun.nio.fs.WindowsFileSystemProvider.<init>(WindowsFileSystemProvider.java:53)
    at sun.nio.fs.DefaultFileSystemProvider.create(DefaultFileSystemProvider.java:36)
    at java.nio.file.FileSystems$DefaultFileSystemHolder.getDefaultProvider(FileSystems.java:108)
    at java.nio.file.FileSystems$DefaultFileSystemHolder.access$000(FileSystems.java:89)
    at java.nio.file.FileSystems$DefaultFileSystemHolder$1.run(FileSystems.java:98)
    at java.nio.file.FileSystems$DefaultFileSystemHolder$1.run(FileSystems.java:96)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.nio.file.FileSystems$DefaultFileSystemHolder.defaultFileSystem(FileSystems.java:96)
    at java.nio.file.FileSystems$DefaultFileSystemHolder.<clinit>(FileSystems.java:90)
    at java.nio.file.FileSystems.getDefault(FileSystems.java:176)
    at com.yy.ent.test.Test1.main(Test1.java:26)
Caused by: java.nio.charset.UnsupportedCharsetException: GBK
    at java.nio.charset.Charset.forName(Charset.java:531)
    at sun.nio.fs.Util.<clinit>(Util.java:41)
    ... 12 more

我正在使用中文windows7,我的java8是:

  • Java(TM) SE运行时环境(build 1.8.0_66-b18)
  • Java HotSpot(TM) 64位服务器VM (build 25.66-b18,混合模式)

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 09:01:30

JRE安装程序似乎只在地区需要时才安装“扩展”字符集:https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

Oracle的Java开发工具包7 (Java 7)适用于所有平台(Solaris、Linux和Microsoft Windows),以及用于Solaris和Linux的Java SE运行时环境7 (JRE 7)支持本页显示的所有编码。Oracle的用于Microsoft的JRE 7可以作为完整的国际版本或欧洲语言版本安装。默认情况下,如果确认主机操作系统只支持欧洲语言,则JRE 7安装程序将安装欧洲语言版本。如果安装程序确认需要任何其他语言,或者如果用户要求在自定义安装中支持非欧洲语言,则会安装完整的国际版本。欧洲语言版本只支持以下基本编码集表中显示的编码。国际版本(包括lib/charsets.jar文件)支持该页面上显示的所有编码。

这也适用于Java 8,我认为这意味着JDK支持所有字符集(包括lib/charsets.jar)。如果安装程序是由具有欧洲地区的用户运行的,JRE尝试安装一个最小的环境,并且不会安装扩展字符集(如GBK )。

解决方案:尝试安装JDK或将用户的区域和语言设置为中文(简体),然后重新安装JRE。

票数 1
EN

Stack Overflow用户

发布于 2016-03-31 12:56:48

或者尝试将"sun.jnu.encoding“属性更改为其他属性,例如:

代码语言:javascript
复制
-Dsun.jnu.encoding=UTF-8

或者检查JVM是否包含GBK支持所需的"lib/charsets.jar“(http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36331128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档