我有一个字符串 "Château",它是使用UTF-8编码的,并且在我的应用程序的底层库中被转换为US-ASCII格式为 "Ch??teau"。
现在,我想从 "U-ASCII" 转换后的字符串 "Ch??teau" 中获取原始字符串 "Château"。但是,我无法使用以下代码实现。
StringBuilder masterBuffer = new StringBuilder();
byte[] rawDataBuffer = (Read from InputStream) // say here it is "Château"
String rawString = new String(rawDataBuffer, "UTF-8");
masterBuffer.append(rawString);
onMessageReceived(masterBuffer.toString().getBytes()) => Here, getBytes() uses the platform's default charset 'US-ASCII.
我的应用程序接收到US-ASCII编码的字节数组。 在应用程序端,即使我尝试获取UTF-8字符串,也没有用。 转换尝试仍然会返回“Ch??teau”。
String asciiString = "Ch??teau";
String originalString = new String(asciiString.getBytes("UTF-8"), "UTF-8");
System.out.println("orinalString: " + originalString);
'originalString'的值仍然是“Château”。
这样做正确吗?
谢谢。
String
存储文本数据时不考虑字符编码,这意味着你的问题不在你发布的代码中。请贴出完整的代码。 - fgeString
(就像C#,JavaScript等)是一个UTF-16代码单元的计数序列,其中一个或两个代码单元编码一个Unicode代码点。(而且,在计算机世界中有一些字符不在Unicode字符集中。) - Tom Blodgetchar
和String
方法对UTF-16数据进行操作,因此必须在运行时执行额外的转换以便在基于UTF-16的代码逻辑中使用基于ISO-8859-1的字符串。 - Remy LebeauString
的元素可以是信鸽;String
没有编码。 - fge