2011-09-13 21 views
5

Để chuyển đổi một chuỗi, tôi đang chuyển đổi nó thành một byte như sau: byte[] nameByteArray = cityName.getBytes();Làm thế nào để chuyển đổi chuỗi thành Byte và Back

Để chuyển đổi lại, tôi đã làm: String retrievedString = new String(nameByteArray); mà rõ ràng không hoạt động. Làm thế nào tôi sẽ chuyển đổi nó trở lại?

+1

bạn cần phải xác định charsetname trên 'new String() ', ví dụ' new String (byte [], "utf-8"); '. Sử dụng bộ ký tự giống như chuỗi gốc. – Augusto

+1

Đó là cách bạn có nghĩa vụ phải chuyển đổi nó trở lại. ví dụ: http://ideone.com/TDb7E Bạn có thể giải thích chính xác những gì không hoạt động không? –

+1

Đọc [bài luận kinh điển] (http://www.joelonsoftware.com/articles/Unicode.html) để hiểu tại sao bạn cần chỉ định mã hóa khi chuyển đổi byte thành chuỗi. – dm3

Trả lời

9

Những ký tự nào có trong tên thành phố ban đầu của bạn? Hãy thử phiên bản UTF-8 như sau:

byte[] nameByteArray = cityName.getBytes("UTF-8"); 
String retrievedString = new String(nameByteArray, "UTF-8"); 
+0

Đó không phải là vấn đề vì cả hai getBytes() và String (byte [] byteArray) sử dụng bộ ký tự mặc định rõ ràng là giống nhau trong cả hai trường hợp - giả sử anh ta đang làm điều này trên máy đơn mặc dù. –

+0

+1, giải thích tất cả. "Ký tự nào" = "Mã hóa ký tự thực tế" là gì. –

+2

@Jan: Nó sẽ chỉ hoạt động nếu mã hóa ký tự mặc định có thể mã hóa tất cả các ký tự trong văn bản hiện có. –

5

rõ ràng không hoạt động.

Thực ra đó chính xác là cách bạn thực hiện. Điều duy nhất có thể xảy ra là bạn đang sử dụng ngầm mã hóa mặc định nền tảng, điều này có thể khác nhau giữa các hệ thống và có thể không thể đại diện cho tất cả các ký tự trong chuỗi.

Giải pháp là phải rõ ràng sử dụng một mã hóa có thể đại diện cho tất cả characts, chẳng hạn như UTF-8:

byte[] nameByteArray = cityName.getBytes("UTF-8"); 

String retrievedString = new String(nameByteArray, "UTF-8"); 
Các vấn đề liên quan