近在Spring Boot集成X-admin2.2时,好多按钮的图标都不显示了,只是显示个小方块乱码。其他的一些checkbox之类的也是不能正常显示。如下所示:
第一步:确定已经引入fonts或lib/layui/font下的文件到项目中,如下如:
第二步:确定引入的文件没有问题。
具体路径如下图所示:
需要注意的是:引入的字体图标文件所在的目录,必须和css文件所在的目录平级,否则就会出现乱码的现象。
我先前是把所有的字体图标文件的要用都改到了fonts下,不管如何修改配置都不能正常显示。切记,切记,切记....
X-admin2.2中switch开关的监听,以及属性值获取和更改状态等操作
Spring Boot 踩坑系列之Error resolving template
#X-admin2.2 #Spring Boot #字体图标乱码
pache Derby 是一个开源的完全使用 Java 语言实现的嵌入式关系型数据库。JDK历史版本中曾经包含了 Derby 版本,叫做 Java DB,但目前 JDK 中已经不再默认包含了。
官网主页:https://db.apache.org/derby/
在更新JDK到21/22版本后,同样也是出现使用控制台执行SQL脚本出现汉字乱码。
D:\db-derby-10\bin>sysinfo
------------------ Java 信息 ------------------
Java 版本: 21.0.2
Java 供应商: Oracle Corporation
Java 主目录: D:\JDK21
Java 类路径: D:\db-derby-10/lib/derbyshared.jar;D:\db-derby-10/lib/derby.jar;D:\db-derby-10/lib/de
rbynet.jar;D:\db-derby-10/lib/derbyclient.jar;D:\db-derby-10/lib/derbytools.jar;D:\db-derby-10/lib/derby
optionaltools.jar
OS 名: Windows 10
OS 体系结构: amd64
OS 版本: 10.0
Java 用户名: chenxd
Java 用户主目录:C:\Users\chenxd
Java 用户目录: D:\db-derby-10\bin
java.specification.name: Java Platform API Specification
java.specification.version: 21
java.runtime.version: 21.0.2+13-LTS-58
--------- Derby 信息 --------
[D:\db-derby-10\lib\derby.jar] 10.17.1.0 - (1913217)
[D:\db-derby-10\lib\derbytools.jar] 10.17.1.0 - (1913217)
[D:\db-derby-10\lib\derbynet.jar] 10.17.1.0 - (1913217)
[D:\db-derby-10\lib\derbyclient.jar] 10.17.1.0 - (1913217)
[D:\db-derby-10\lib\derbyshared.jar] 10.17.1.0 - (1913217)
D:\db-derby-10\bin>startNetworkServer
Tue May 14 10:47:20 CST 2024 : Apache Derby 网络服务器 - 10.17.1.0 - (1913217) 已启动并准备接受端口 1527
上的连接
运行ij,插入记录,出现乱码(JDK19及之前未曾出现这个问题):
D:\db-derby-10\bin>ij -p ij.properties
ij>connect 'chendb';
ij> drop table zipcodes;
ij> create table zipcodes(zipcode varchar(6), university varchar(20), city varchar(10));
ij> insert into zipcodes values ('100044', '北京交通大学', '北京');
ij> insert into zipcodes values ('200030', '上海交通大学', '上海');
ij> select * from zipcodes;
ZIPCO&|UNIVERSITY |CITY
--------------------------------------
100044|?????????? |????
200030|????????? |???
基于上回Java输入输出文件乱码的经验,基本确定就是控制台字符集(GBK)和数据库字符集(UTF-8)编码不一致,需要修改ij运行时的字符集为GBK。由于ij运行时,实际是用java命令指定类名运行的,可以使用运行时指定 ”-Dderby.ui.codeset=GBK“ 来修改字符集为“GBK”。为了方便使用,直接使用配置文件ij.propertis,在其中加入字符集相关的属性定义:
ij.driver=org.apache.derby.jdbc.ClientDriver
ij.protocol=jdbc:derby://localhost:1527/
#解决JDK21后,命令行汉字输入乱码问题
#默认命令行字符集为GBK(代码页936)而非UTF-8(代码页 65001)
#https://www.rfc-editor.org/rfc/rfc5646.html
derby.ui.locale=zh-Hans
derby.ui.codeset=GBK
重新运行ij:
D:\db-derby-10\bin>ij -p ij.properties
ij 版本 10.17
ij> connect 'chendb';
ij> insert into zipcodes values ('100044', '北京交通大学', '北京');
已插入/更新/删除 1 行
ij> select * from zipcodes;
ZIPCO&|UNIVERSITY |CITY
--------------------------------------
100044|?????????? |????
200030|????????? |???
100044|北京交通大学 |北京
已选择 3行
ij>
至此成功解决乱码问题。
换流的作用就是将我们的字节流转换成字符流
字节流是可以处理一切内容的,包括图片,音频,视频,也包括纯文本,在很多系统和框架的底层返回给我们的都是字节流(有时候我们使用字节流处理并不方便,这就是我们为什么要转换字符流的原因)
System.in,System.out都是字节流,因为我们键盘输入还是输出的都是字符串,所以我们可以对它进行转换。
在我们的底层,如果是纯文本的话就涉及到一个东西是字符集。将字节转成字符叫做解码(在解码的过程中就涉及到字符集的问题,如果工程的字符集跟源头(文件)的字符集不统一就会出现乱码),所以这个时候我们最好可以指定字符集
从字节流到字符流的转换
只要我们看见Reader都建议加一个BufferedReader
将写入的字符编码为字节
讲一下什么使用字节流,什么时候使用字符流
其实底层都是字节,我们使用字符是为了处理一些文本和字符串提高性能字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点 所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列
字节流和字符流的使用:
Java IO流中提供了两种用于将字节流转换为字符流的转换流。其中InputStreamReader用于将字节输入流转换为字符输入流,其中OutputStreamWriter用于将字节输出流转换为字符输出流。使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集
讲一下缓存流和转换流的结合,看见Reader我们就可以使用缓存流提高性能
使用转换流实现字节到字符的转换以及输入和输出
· 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
· 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
讲一下什么是节点流
字符流和字节流就可以叫做节点流
出现乱码的原因有两种:
1.字节数不够出现乱码
2.字符集不统一出现乱码
html文件的下载,如何使用字节流,如何使用转换流
在java中文件的传输其实就是靠流来实现的,网络流也是属于字节流,所以我们先使用字节流
我觉得写的时候应该是全部都写出来才写的,具体debug才知道,我这里就不弄了
为什么读取的时候乱码,写入的时候不乱码
忽然一下子自己就懂了,总之写入的时候只要讲字符集设置的和源头的文件一致就可以了
*请认真填写需求信息,我们会在24小时内与您取得联系。