自己做了一个最简单的基于SpringBoot的控制台Console程序,用来做一些小工具,准备做一个本地文件名重命名的工具类。
首先,自己先熟悉一下怎么创建一个本地的控制台程序,然后在这个过程中,自己读取了配置文件中的信息,在读取的过程中,配置文件中我写入了中文,发现输出是乱码,而在普通的system.out.println(“日志信息”)中,却没有出现乱码,这说明乱码的问题是出现在读取配置文件上。
怎么解决这个问题呢:
参考了以下的文档
同时,根据之前与阿韬一起开发的经验,估计是出现在项目工程的编码设置上。
现象如下:
下面的是我写的配置文件的内容,很简单:
配置文件内容.png
然后,写了一个很简单的类,用来读取配置文件中的内容并输出:
package com.zsh.renamefile.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/*************************************************************
* @Description: 一个最简单的本地服务例子,用来作为Console控制台程序的学习入门
*
* @Author: 白米粥
* @Date: 2019-07-15 09:44
*************************************************************/
@Service
public class HelloMessageService {
@Value("${name:unknown}")
private String name;
public String getMessage() {
return getMessage(name);
}
public String getMessage(String name) {
return "Hello " + name;
}
}
但是,输出的内容确是中文乱码,如下:
Connected to the target VM, address: '127.0.0.1:60133', transport: 'socket'
2019-07-15 10:11:41.315 INFO 11904 --- [ main] c.zsh.renamefile.RenamefileApplication : Starting RenamefileApplication on zsh with PID 11904 (E:\Program\zshsvn2\mycode\renamefile\target\classes started by zsh in E:\Program\zshsvn2\mycode\renamefile)
2019-07-15 10:11:41.324 INFO 11904 --- [ main] c.zsh.renamefile.RenamefileApplication : No active profile set, falling back to default profiles: default
2019-07-15 10:11:42.008 INFO 11904 --- [ main] c.zsh.renamefile.RenamefileApplication : Started RenamefileApplication in 1.232 seconds (JVM running for 2.344)
程序的实际入口在这里:
Hello ������
Disconnected from the target VM, address: '127.0.0.1:60133', transport: 'socket'
Process finished with exit code 0
首先,我的修改的方法如下:
点击idea菜单栏的File->Settings…->Editor->File Encodings选项卡
修改项目的编码配置.png一共修改上面的三个地方,我个人觉得最有用的应该是最下面的一个Properties Files的设置,这个应该是最主要的地方,修改之后,点击保存。
修改之后,会发现配置文件整个编码都乱了,这个原因是以前使用的gbk的编码,现在修改为了utf-8,所以文件会变成乱码,所以在修改之前先复制粘贴,备份一下,然后再从粘贴板粘贴过去就好了。
修改后乱码的配置文件.png覆盖如下:
重新覆盖配置文件.png然后重新启动一下项目,但是编码变了,还是乱码:
Connected to the target VM, address: '127.0.0.1:60914', transport: 'socket'
2019-07-15 10:39:10.835 INFO 15156 --- [ main] c.zsh.renamefile.RenamefileApplication : Starting RenamefileApplication on zsh with PID 15156 (E:\Program\zshsvn2\mycode\renamefile\target\classes started by zsh in E:\Program\zshsvn2\mycode\renamefile)
2019-07-15 10:39:10.840 INFO 15156 --- [ main] c.zsh.renamefile.RenamefileApplication : No active profile set, falling back to default profiles: default
2019-07-15 10:39:11.984 INFO 15156 --- [ main] c.zsh.renamefile.RenamefileApplication : Started RenamefileApplication in 1.871 seconds (JVM running for 3.233)
程序的实际入口在这里:
Hello �米粥
Disconnected from the target VM, address: '127.0.0.1:60914', transport: 'socket'
Process finished with exit code 0
乱码问题没有得到解决,仅仅只是乱码方式变了。
最后参考以下解决办法:
配置文件进行如下配置,增加spring.message.encoding=UTF-8,再次运行,就解决了配置文件中文乱码的问题了。
#设置编码格式 #返回页面、数据中文乱码问题 #server.tomcat.uri-encoding=UTF-8
#spring.http.encoding.force=true
#spring.http.encoding.charset=UTF-8
#spring.http.encoding.enabled=true
#解决程序读配置文件乱码问题
spring.message.encoding=UTF-8 name=白米粥
运行结果如下:
正确的输出结果.png乱码问题得到解决。
网友评论