linux 服務器 java日志中文亂碼?????


公司測試集群遷往騰訊雲,安裝完flume和kafka后使用api消費topic,在應用日志中打印出來的日志中文部分全部是???????,數據存儲寫入mysql數據庫后中文也是亂碼,針對這個問題進行調整修復:

1、kafka消費的格式問題

   設置kafka序列化和反序列化格式

properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

經測試和該配置無關【注:並不表示在使用kafka api時不用指定序列化格式】,應用日志中中文部分仍然時亂碼!

2、mysql數據庫默認編碼問題【因為在應用日志中也是亂碼,所以不太可能是這種情況】

查看mysql數據庫的編碼格式是否時中文或utf8

命令:show variables like 'character%'

結果:

 

 紅色部分的值可以看出編碼格式沒有錯誤!

 

3、服務器本身的默認編碼格式問題

因為是新的雲服務器,所以才有了這個猜想,在網上也看到了相關帖子

通過命令查看服務器的編碼設置:locale

 

 

可以看出都是英文的utf-8,所以打算調整該設置,但沒找到直接修改這個設置的方法或命令,只有通過修改 /etc/profile文件進行調整【root用戶

vim vim /etc/profile

在文件最后添加 :export LANG="zh_CN.UTF-8"

保存退出后執行命令:source /etc/profile 使配置生效,在運行服務后亂碼現象不見了

還有一種方式修改,但只是臨時的,當關閉會話后還是會出現亂碼,所以不建議:

直接執行:export LANG="zh_CN.UTF-8"

     export LC_ALL="zh_CN.UTF-8"

 

另外在網上查找時遇到一篇帖子是關於locale命令及設置的:https://www.cnblogs.com/regit/p/7837814.html

 

在排查時我使用命令行kafka producter 產生消息,並使用consumer查看發現都沒有出現亂碼的現象,所以就有了服務器編碼格式非中文的猜測,測試並打印出來編碼格式

println(Charset.defaultCharset())

結果在本地和服務器上的結果是不一樣的

本地:

 

 

服務器:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM