近在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小時內與您取得聯系。