【问题标题】:Java Encoding issueJava 编码问题
【发布时间】:2019-12-04 18:24:16
【问题描述】:

在 Java JDK 9 上定义以下字符串时 字符串 s = "एक गाव में एक किसान" 它抛出以下错误: 用于编码 US-ASCII 的不可映射字符 (0xE0) 我知道它是 UTF-8 编码的,但由于 JDK 9 将默认字符集设置为 US-ASCII,但我找不到如何将默认字符集从代码本身更改为 UTF-8?

【问题讨论】:

  • 这能回答你的问题吗? Setting the default Java character encoding
  • 不,我想从代码中更改默认字符集
  • Unfortunately, the file.encoding property has to be specified as the JVM starts up 在答案中
  • 有没有我将用户输入以字节为单位并转换成 utf-8 格式的字符串?
  • 有 2 个不同的问题:源编码和代码中 IO 操作的编码。当您以非默认编码编写了一些 .java 文件时,您必须说明 java 编译器应该使用什么编码来读取源以正确解析它们。第二个问题是您如何在代码中读取/写入数据。它也使用默认编码,但是有很多特定的方法可以使用显式编码来读取/写入数据,例如: InputStreamReader(InputStream in,String charsetName), OutputStreamWriter(OutputStream out,String charsetName), String(byte[] bytes, String字符集名称)等。

标签: java encoding ascii


【解决方案1】:

我想从代码中更改默认字符集

不可能1

源代码只是文本,它没有定义用于存储该文本的编码。

但是,您可以通过将所有非 ASCII 字符指定为 Unicode 转义符来确定您的源代码是 US-ASCII,因此编码无关紧要(不包括 UTF-16、UTF-32 等):

String s = "\u090f\u0915 \u0917\u093e\u0935 \u092e\u0947\u0902 \u090f\u0915 \u0915\u093f\u0938\u093e\u0928"

当然,要知道字符串的意思是很困难的。

1) 由于 Java 不支持 BOM。

【讨论】:

    最近更新 更多