2014-09-02 32 views
0

我從我們的數據庫(第三方工具)獲取一個字符串 - 我遇到了一個名爲 的問題 - 有時它是正確的「Tarsøy」,並且所有的運行都很順利,但有時它很順利「Tars00F8y」。我試圖通過URLDecoder.decode(name, "UTF-8")寫一些驗證函數,它獲取一個字符串並返回驗證的函數,但不成功。Charset trouble(øas 00F8)

這是我從我們的基地有刺:

Database.WIKI.get(index); // the index is the ID of the string 
          // this is no sql DB 

現在關於「有時」 - 這意味着該代碼只是工作不同=),我認爲這是與內部DB例外左右相連。所以,我試圖做類似validate(Database.WIKI.get(index)) 可能是我應該嘗試像Encode String to UTF-8

+2

你能告訴我們你如何從數據庫中讀取的'String'以及如何你用吧? – icza 2014-09-02 08:35:58

+1

如果它有效,它聽起來像是數據庫中的數據有問題。 – Keppil 2014-09-02 08:37:24

+0

你應該提供一個更好的「有時」的定義。順便說一下,用'URLDecoder.decode(name,「UTF-8」)'失敗的嘗試並不奇怪。字符串「Tars00F8y」既不是URL也不是UTF-8編碼。 – Holger 2014-09-02 08:40:11

回答

2

在Java,JavaScript和(特別有趣的)JSON存在的符號\u00F8ø。我認爲這是發送到數據庫,也許從特定計算機區域設置上的特定瀏覽器發送。 \u消失,並voilà。也許它仍然是字符串中的隱形控制字符。這對修理很好。

我的猜測是JSON數據;但是通常JSON庫應該解析u轉義字符。這很奇怪。

檢查存儲"x\\u00FDx"時會發生什麼情況。字符長度是6還是7(幸運)。

一些理智檢查:假設你在UTF-8的工作,特別是當數據通過HTML或JS到達:

  • Content-Type頭的text/html;字符集= UTF-8
  • (可選)與元標記的charset = UTF-8
  • <form action="..." accept-charset="UTF-8">
  • JSON:contentType: "application/json; charset=UTF-8"
+0

Yess!你是對的!非常感謝你=) – curiousity 2014-09-02 10:57:40

+0

@curiousity你找到一個修理/解決方案嗎? – 2014-09-02 11:11:35

+0

是的,我已經清除了從哪裏解析JSON數據的數據庫記錄,並在此處將其重寫爲UTF-8(通過叮咬)。 – curiousity 2014-09-02 11:30:09