2013-09-26 73 views
0

如何將包含OCTL字符的字符串轉換爲ISO-8859-15以使其變得可理解。 我正在使用java。 TY。使用java將OCTL字符轉換爲ISO-8859-15(html)

我想恢復一個值的informix bbdd,我把裏面的字符串,但是當我在視圖中顯示我看到Espa \ 321a --->,我想看到ESPAÑA。我一直在尋找一種看起來\ 321是OCTL的可能嗎?

HTML OCTL HEX CMP CHR辨

Ñ | \ 321 | = D1 | N〜| (Ñ)|資本N,波浪

所以OCTL = \ 321 = N

我試試這個,但沒有爲我工作,我做某事錯。

Charset charset = Charset.forName("OCTL"); 
     CharsetDecoder decoder = charset.newDecoder(); 
     CharsetEncoder encoder = charset.newEncoder(); 

     try { 

      ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(rs.getString(Constants.DES_PAIS_COM))); 

      ByteBuffer and then to a string. 

      CharBuffer cbuf = decoder.decode(bbuf); 
      String s = cbuf.toString(); 
      deuteDetall.setDesPaisCom(s); 

     } catch (CharacterCodingException e) { 



     } 
+1

「OCTL character」是什麼意思?請記住,一個*字符串*從來沒有編碼......或者說,它總是UTF-16。如果你提供更多的細節和例子,這將會非常有幫助。 –

+0

字符與標準有什麼關係_「道路車輛 - 客車和拖車組合 - 橫向穩定性測試」_?你可能是指ISO-8859,但是你仍然需要指定確切的字符集(例如ISO-8859-1) –

+0

這是真的!抱歉。 – ZaoTaoBao

回答

1

\321是八進制,十六進制D1,(3 * 64 + 2 * 8 + 1)。

String s = "..."; 
Pattern OCTAL = Pattern.compile("\\\\(\\d\\d\\d)"); 
StringBuffer sb = new StringBuffer(); 
byte[] b1 = new byte[1]; 
Matcher m = OCTAL.matcher(s); 
while (m.find()) { 
    String replacement = m.group(): // default original 
    try { 
     b1[0] = (byte)Integer.parseInt(m.group(1), 8); 
     replacement = new String(b1, "ISO-8859-15"); 
    } catch (NumberFormatException e) { 
     //... 
    } 
    m.appendReplacement(sb, replacement); 
} 
m.appendTail(sb); 
s = sb.toString(); 
+0

sb.appendReplacement ??是Java 1.7?爲你的時間。我可以使用..wtf。 – ZaoTaoBao

+0

對不起,'m.appendReplacement'。 '= D1'的功能類似。 'N〜'要求列出所有的可能性('s.replace(「N〜」,「\ u00D1」)')。 –

+0

我真的很感謝你的幫助,這是完美的作品! TY! – ZaoTaoBao