2013-09-26 35 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