Java 编码 - 损坏的法语字符

Java encoding - corrupted French characters

我有一个系统,我从第三方那里得到法语文本,但我很难让它变得可读。

String frenchReceipt = "RETIR�E"; // The original Text should be "RETIRÉE"

我尝试了所有可能的组合来使用 UTF-8 和 ISO-8859-1 编码转换字符串

String frenchReceipt = "RETIR�E"; // The original Text should be "RETIRÉE"

byte[] b1 = new String(frenchReceipt.getBytes()).getBytes("UTF-8"); 
System.out.println(new String(b1));  // RETIR�E

byte[] b2 = new String(frenchReceipt.getBytes()).getBytes("ISO-8859-1"); 
System.out.println(new String(b2));  // RETIR�E

byte[] b3 = new String(frenchReceipt.getBytes(), "UTF-8").getBytes(); 
System.out.println(new String(b3));  // RETIR?E 

byte[] b4 = new String(frenchReceipt.getBytes(), "UTF-8").getBytes(); 
System.out.println(new String(b4));  //RETIR?E

byte[] b5 = new String(frenchReceipt.getBytes(), "ISO-8859-1").getBytes("UTF-8"); 
System.out.println(new String(b5));  //RETIR�E

byte[] b6 = new String(frenchReceipt.getBytes(), "UTF-8").getBytes("ISO-8859-1"); 
System.out.println(new String(b6));  //RETIR?E

byte[] b7 = new String(frenchReceipt.getBytes(), "UTF-8").getBytes("UTF-8"); 
System.out.println(new String(b7));  //RETIR�E

byte[] b8 = new String(frenchReceipt.getBytes(), "ISO-8859-1").getBytes("ISO-8859-1"); 
System.out.println(new String(b8));  //RETIR�E

如您所见,无法解决问题。

请指教

更新: 第三方合作伙伴确认以“ISO-8859-1”编码发送到我的应用程序的数据

� 只是一个替换字符 (EF|BF|BD UTF-8),用于在系统无法呈现正确符号时指示问题。 这意味着您没有机会将 � 转换为 É。

frenchReceipt 不包含任何可以转换为 É 的字节序列,因为声明:

String frenchReceipt = "RETIR�E";

下面的代码片段应该可以正常工作,但您必须使用正确的字节源。

byte[] b2 = new String(frenchReceipt.getBytes()).getBytes("ISO-8859-1");
System.out.println(new String(b2));

因此,如果您从数据源按字节读取“RETIRÉE”并获得 52|45|54|49|52|C9|45(预期为 ISO-8859-1),那么您将获得正确的结果。 如果数据源已经有字节序列EF|BF|BD,你唯一的选择就是搜索和替换,但在这种情况下,ä和É之间没有区别。

更新: 由于数据由 TCP

传送
new BufferedReader(new InputStreamReader(connection.getInputStream(),"ISO-8859-1"))

解决了问题。