2012-02-24 48 views
0

我在數據庫中存儲了以下字符串,格式爲Unicode將數字實體轉換爲可讀格式

كنت قد دخلت بالفعل في مكان آخر من 

現在,我想將該字符串轉換爲可讀格式。在Java中,我該怎麼做?

+2

這不是一個Unicode格式,它是XML/HTML字符參考erences。在您希望字面字符的數據庫中有這樣的數據是一種很大的數據質量。您可以按照Andrzej的描述通過解讀它們來閱讀它們,但從長遠來看,您需要修正將這些數據放在第一位的任何內容。提交的表單數據中的HTML字符引用通常表示您沒有將表單頁面作爲UTF-8提供。 – bobince 2012-02-24 11:08:07

+1

我只想用那種語言的字符串,例如如果字符串在烏爾都語中,那麼它應該只顯示烏爾都語而不是Unicode字符。 – 2012-02-24 13:31:44

+0

?烏爾都語是Unicode字符。 '&''''''是一個HTML字符引用轉義符。它本身並不是與Unicode有關的。 – bobince 2012-02-25 20:46:28

回答

4

由於這些是HTML實體,因此需要某種庫方法將它們解析爲它們所代表的字符。

Apache Commons有StringEscapeUtils.unescapeHtml例如,我敢肯定還有很多其他的。

如果你真的想推出自己的東西,對於這種特殊情況下,你可以tokenise人數&#;之間,它們解析爲十六進制INT,並呼籲Character.toChars將它們轉換爲Java的字符。但是,它會花費更多的工作量,並且比使用庫還包含更多的錯誤,並且我確信規範中存在邊緣案例,這些案例我都在進行着描述。

要麼應該給結果

ᘃᘆᕸᘂᖃᖃᖂᘄᕸᕶᕵᘄᘁᖓᘄᘁᘐᘅᘃᕵᘆᕰᖂᖅᘅᘆ

(順便說一句,我認爲你應該更具體的瞭解你的意思是 '可讀格式' 是什麼。我可以讀取即時字符串 - 這是一個實體引用序列。你是一個開發人員,準確!)

+0

可讀意味着如果字符串是法語或烏爾都語,那麼它應該只顯示那個東西,而不是那個的unicode。 – 2012-02-24 13:30:25

+3

@BhavikAmbani我認爲你誤解了Andrzej,他確實解決了你的問題。您需要在構建頁面時爲每個角色調用unescapeHtml函數。然後它會自動使用正確的字符集。 – egrunin 2012-02-24 15:42:54

+0

@Bhavik - 但字符串**在法語或烏爾都語中不是**,它是US-ASCII,它是一串HTML實體引用。 :)你想*解析*這些引用,將字符串轉換爲基於一組規則的差異。這當然是有效的,但將其稱爲「解決實體參考」而不是「可讀」更爲明確。無論如何,這有點偏離主題 - 爲了解決您的問題,您需要調用合適的方法來避開字符串。 – 2012-02-24 15:52:38