[英]Recover wrongly encoded character (Java )
我們在Linux中使用cron運行了一些Java代碼,以在生產數據庫中保留數千條記錄。 該框中的語言環境charmap是“ ANSI_X3.4-1968”。 現在,我們將以下步驟持久化到數據庫。 1.在文本上使用StringEscapeUtils.unescapeHtml4。2.以UTF-8格式寫入String並保存在數據庫中
現在的問題是在執行這些步驟后,特殊字符顯示為“?”。 是否可以將其還原為原始字符? 我已經按照以下步驟模擬了這個問題。
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");
這再次表明字符編碼出奇地難以處理。
該代碼段的作用是分步進行的:
insertSpecial
的字節 我已經看過幾次這個代碼,不幸的是它只會破壞事情。 這是完全不必要的,即使編寫正確,也不會“轉換”任何內容。 如果平台編碼不是UTF-8
那么它很可能會破壞任何特殊字符(如果平台編碼與String構造函數中給出的編碼之間存在適當的區別,則甚至會破壞整個String)。
問號是無法轉換的字符的占位符,表示該字符已永遠消失。
這是一些閱讀材料,因此您不會再犯該錯誤: 每個軟件開發人員絕對絕對要完全了解Unicode和字符集(沒有任何借口!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.