[英]Convert unicode value to string in java
我正在嘗試提取文本中的貨幣,並且從包含特殊貨幣符號的db中獲取貨幣。 例如,對於磅,我在數據庫中具有磅“ \\ u00A3”的unicode以及其他標識符,例如“ gbp”。
我試圖從unicode中獲取相應的符號,並按照此處的建議在循環中與我的文本進行比較。
private Optional<Currency> extractTokenWise(Iterable<String> tokens){
try {
for (String aToken : tokens) {
for (String currency : currencies.keySet()) {
for (String arep : currencies.get(currency)) {
if(arep.startsWith("\\")){ //special character for currency written in unicode representation
byte[] charset = arep.getBytes("UTF-8");
arep = new String(charset, "UTF-8");
}
if (aToken.equals(arep)) {
return Optional.of(Currency.findProperEnum(currency));
}
}
}
}
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return Optional.empty();
}
有趣的是,當arep
等於"\£"
,它不起作用,但是當我專門給出String
值"\£"
,它將產生我想要的結果。 我在這里想念什么?
如評論中所述,這樣的方法應該起作用:
if (arep.startsWith("\\u")) {
arep = Character.toString((char) Integer.parseInt(arep.substring(2), 16));
}
我認為您將Java代碼中的unicode 轉義序列與包含此類轉義序列的字符串混合在一起。
String poundSign = "\£";
為poundSign
分配一個包含單個字符£的字符串。 該字符串的長度為1個字符。 在內存和類文件中,它將占用2個字節。
它看起來像arep
包含字符串\£
通過指定String unicodeEscapeForPoundSign = "\\\£";
-這就是您的第一個if語句要測試的內容。 它包含Java代碼中使用的unicode轉義序列 ,但不包含此轉義序列表示的字符。 它包含6個字符“ \\”,“ u”,“ 0”,“ 0”,“ A”和“ 3”(如您的IDE所示)。 arep.getBytes("UTF-8");
返回僅包含這些字符和new String(charset, "UTF-8");
的數組new String(charset, "UTF-8");
將數組轉換回字符串\£
而不是字符串£
解決方案取決於您從數據庫中獲得什么 。 假設您具有從db-value到Currency
對象或ISO貨幣代碼的映射,則不需要第一個if語句,只需確保arep
包含正確的字符串即可:
String arep = "\£"
(單英鎊字符) String arep = "\\\£"
(磅字符java unicode轉義字符串)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.