2012-06-27 43 views
1

我正在處理第三方API/Web服務,並且它們只允許在其XML中使用拉丁-1字符集。是否有一個現有的API /方法可以查找並替換字符串中的所有非拉丁-1字符?替換所有非拉丁-1字符的API或方法

例如:凱文

有沒有辦法讓凱文?

+1

用什麼替換它們? – bmargulies

+0

@bmargulies我更新了我的問題 – Gregg

+0

因此,您不希望'K é vin'將它們從字節流中移除(如在簡單文本編輯器中打開它),但實際上將它們從XMl信息集中移除(作爲XML解析器將它讀取到應用程序中)? – MvG

回答

2

使用ICU4J,

public String removeAccents(String text) { 
    return Normalizer.decompose(text, false, 0) 
       .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 

,我發現這個例子在http://glaforge.appspot.com/article/how-to-remove-accents-from-a-string

在Java 1.6的必要的正規化可能被內置。

+0

一個非常好的第一次開始,至少對於給定的例子。但是,不能保證結果將僅爲ASCII,因爲Unicode代碼點不會分解爲ASCII字符並結合區分符號。 – MvG

+0

如果你真的想處理所有晦澀難懂的情況,你將不得不編寫代碼。可能是一個ICU4J轉碼器對象。沒有任何我知道的那種具有所有奇怪的可能性,比如將C DEGREE CELSIUS轉換爲C或 LATIN CAPITAL LETTER L WITH STROKE to L. – bmargulies

+0

或者檢測不可轉換的碼點並通過移除它們來適當地作出響應,中止操作,詢問用戶或其他什麼。 – MvG