簡體   English   中英

恢復編碼錯誤的字符(Java)

[英]Recover wrongly encoded character (Java )

我們在Linux中使用cron運行了一些Java代碼,以在生產數據庫中保留數千條記錄。 該框中的語言環境charmap是“ ANSI_X3.4-1968”。 現在,我們將以下步驟持久化到數據庫。 1.在文本上使用StringEscapeUtils.unescapeHtml4。2.以UTF-8格式寫入String並保存在數據庫中

現在的問題是在執行這些步驟后,特殊字符顯示為“?”。 是否可以將其還原為原始字符? 我已經按照以下步驟模擬了這個問題。

  1. 將Eclipse編碼更改為“ ANSI_X3.4-1968”
  2. 編寫以下代碼行


String insertSpecial = StringEscapeUtils.unescapeHtml4("×");
System.out.println(insertSpecial);
String uni = new String(insertSpecial.getBytes(), "UTF-8");// This value is currently in DB
System.out.println(uni);

現在,我想從字符串“ uni”中獲取“×”。 任何幫助將不勝感激。

基本上沒有 您在new String(insertSpecial.getBytes(), "UTF-8");犯了最大的錯誤new String(insertSpecial.getBytes(), "UTF-8"); 這再次表明字符編碼出奇地難以處理。

該代碼段的作用是分步進行的:

  1. 給我平台編碼中insertSpecial的字節
  2. 從字節創建一個新的String,告訴它們字節是UTF-8(即使字節是以前在平台編碼中獲得的)

我已經看過幾次這個代碼,不幸的是它只會破壞事情。 這是完全不必要的,即使編寫正確,也不會“轉換”任何內容。 如果平台編碼不是UTF-8那么它很可能會破壞任何特殊字符(如果平台編碼與String構造函數中給出的編碼之間存在適當的區別,則甚至會破壞整個String)。

問號是無法轉換的字符的占位符,表示該字符已永遠消失。

這是一些閱讀材料,因此您不會再犯該錯誤: 每個軟件開發人員絕對絕對要完全了解Unicode和字符集(沒有任何借口!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM