Mã của bạn hiện đang gọi getBytes()
bằng cách sử dụng mã hóa mặc định nền tảng - rất hiếm khi là ý tưởng hay. Tìm hiểu xem mã hóa dữ liệu thực sự là gì và sử dụng nó. (Đó là khả năng là UTF-8.)
Nếu Blackberry bao gồm DocumentBuilder.parse(InputSource)
, đó sẽ là một lợi thế:
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
StringReader reader = new StringReader(xmlData);
try {
Document doc = docBuilder.parse(xml);
doc.getDocumentElement().normalize();
} finally {
reader.close();
}
Nếu điều đó không làm việc, có một rất cái nhìn cận cảnh chuỗi của bạn, ví dụ như thế này:
for (int i=0; i < xmlData.length(); i++) {
// Use whatever logging you have on the Blackberry
System.out.println((int) xmlData.charAt(i));
}
Có thể là vấn đề đang đọc phản hồi từ máy chủ - nếu bạn đang đọc nó nặng, bạn có thể có Unicode null (\ u0000) trong chuỗi của bạn, có thể không xuất hiện rõ ràng trong log/debug output, nhưng sẽ gây ra lỗi mà bạn đã hiển thị.
EDIT: Tôi vừa thấy rằng bạn đang nhận được dữ liệu base64 ở vị trí đầu tiên - vậy tại sao chuyển đổi nó thành chuỗi và sau đó quay lại byte? Chỉ cần giải mã base64 thành một mảng byte và sau đó sử dụng nó làm cơ sở cho ByteArrayInputStream
của bạn. Sau đó, bạn không bao giờ phải đối phó với một mã hóa văn bản ở nơi đầu tiên.
Nguồn
2009-06-09 05:29:17
cho chúng ta thấy xml –