亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

全新安裝的 Ubuntu 16.04 LTS 服務器與升級后的服務器之間的編碼問題

全新安裝的 Ubuntu 16.04 LTS 服務器與升級后的服務器之間的編碼問題

一只萌萌小番薯 2023-01-05 10:04:23
作為項目的一部分,我們需要從 Ubuntu 14.04 遷移到 Ubuntu 16.04。但是,自升級完成后,所有功能都無法正常運行。存儲在數據庫中時字符的編碼是混亂的。相同的 debian 版本的軟件會產生不同的結果,這意味著 ISO 問題與不同的庫或 Java 行為存在一些差異。升級后的服務器沒有遇到任何問題,它只在較新的安裝上持續存在,這意味著 ISO 級別存在問題,但沒有明顯跡象表明哪個庫或類似庫可能安裝失敗。添加了日志記錄以打印接收到的字節,并且 Java 仍然按預期讀取它。但是,當它把它們存儲在數據庫中時,它們就完全不同了。這是通過之前的 JPA 連接設置完成的。這已經在使用“useUnicode=true&characterEncoding=UTF-8”字段。當 Java 再次讀取此數據時,它仍然認為它使用的是正確的字節,但實際上并非如此。同樣,如果你直接向數據庫中添加一些東西,Java 的調試日志不會顯示正確的字節,但是當通過只能通過這里的接口顯示時,信息仍然正確顯示。這意味著問題在于存儲數據而不是處理數據,但是相同版本的 debian 安裝會影響兩個版本。例如,阿拉伯語中的 ???? 應該被編碼為(通過在 mysql/mariadb 中使用十六進制函數),在正確的版本中顯示為“D8B4D984D8A7D8A4”,但在不正確的版本中顯示為“C398C2B4C399C284C398C2A7C398C2A4”。這可能會提供有關編碼無法正常工作的原因的更多信息。Java 讀取不正確的字節就好像它們是正確的一樣,這更可能是 Java 的問題,但由于系統之間的不一致,混亂仍然存在。
查看完整描述

2 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

對于可能遇到類似情況的任何人,結果是 Java 在沒有默認為 utf8 的情況下運行。OpenEJB/JPA 配置正確,數據庫也是如此,但服務器的一個方面默認為不同的字符集,因此受影響區域的啟動參數解決了問題!



查看完整回答
反對 回復 2023-01-05
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

D8B4D984D8A7D8A4是正確的 utf8(或 utf8mb4)編碼????。 C398C2B4C399C284C398C2A7C398C2A4是“雙編碼”版本。這意味著某些東西仍然指定“latin1”作為字符集。也許您轉儲并重新加載了數據,這就是它發生的地方?

有關更多信息,請參閱UTF-8 字符問題;我看到的不是我存儲的,也許是http://mysql.rjweb.org/doc.php/charcoll


查看完整回答
反對 回復 2023-01-05
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號