Java文字コード
大家都不喜欢字符编码吧。我记得有人说Java8已经将UTF-8设为默认值,虽然这已经晚了,但我希望能写一个Java中使用字符编码的示例。
在什么情况下需要注意字符编码
首先,需要考虑字符编码的情况是什么时候呢?
这发生在我们的Java应用程序之外有输入或输出的时候。
输入示例
在服务器客户端系统中,从客户端输入的数据读取外部文件,如CSV等。
产出的例子
从服务器返回的服务器客户端系统
文件导出
数据库注册
使用文字编码进行处理
我认为还有很多其他的,但我想介绍一些我经常使用的。
字符串.取字节
这是一个以字节形式获取字符串的函数。
"TEST".getBytes(StandardCharsets.UTF_8);
按照如下的方式,在getBytes函数的参数中指定字符编码。这样就可以将字符串“TEST”解释为UTF-8,并将其转换为字节形式。
getBytes函数也可以不指定任何参数。在这种情况下,会使用执行环境中的默认字符编码。
如果想要确认该值,可以执行以下代码来确认。
System.out.println(System.getProperty("file.encoding"));
如果你想改变默认的字符编码,请在运行时指定以下选项。
-Dfile.encoding=〇〇
String的构造函数
在Java中,使用String类的构造函数可以接受一个byte数组和字符编码,从而可以获取指定字符编码的字符串。
byte[] byte1 = "TEST".getBytes(StandardCharsets.UTF_8);
String encorded = new String(byte1, "MS932");
如果没有指定字符编码,则该构造函数将使用执行环境中的默认字符编码。
读取文件
有很多方法可以读取文件,但我只选择一种方法来提取。
try {
BufferedReader bufferedReader = Files.newBufferedReader(Paths.get(""), StandardCharsets.UTF_8);
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
使用Files.newBufferedReader函数指定要读取的文件,并在第二个参数中指定字符编码。
可以省略字符编码的指定,此时将默认为UTF-8,在任何环境下都适用。(据说是从Java8开始)
就像这样。
public static BufferedReader newBufferedReader(Path path) throws IOException {
return newBufferedReader(path, StandardCharsets.UTF_8);
}
最后
那么,我想今天就到这里结束吧。
Files.newBufferedReader默认是UTF-8的,而getBytes和String的构造方法则根据环境而有不同的默认值。
请注意不同的函数使用不同的默认值。
嗯,我认为无论何时都应该指定字符编码。。