关于字符串和byte数组在java和ios之间兼容的解决办法。

之前在java上写过String转为byte数组的代码,后来在开发iPhone程序的时候,发现也需要把NSString转为byte数组,并且需要达到跟java程序兼容。但是发现java自身的默认编码机制为iso-8859-1,而ios的默认编码机制为utf-8,所以直接编码并不能达到两者兼容的问题。后来查阅相关资料,最后解决了编码兼容的问题,而且中英文都通用。

如下为java代码:y

  1. String str = "你好啊,aBc!";  
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  3. DataOutputStream outputstream = new DataOutputStream(baos);  
  4. outputstream.writeChars(str);  
  5.   
  6. byte[] contents = baos.toByteArray();  
  7. for (int i = 0; i < contents.length; i++) {  
  8.     System.out.println("contents:"+contents[i]);  
  9. }  
最后打印为:
[java]  view plain copy
  1. contents:79  
  2. contents:96  
  3. contents:89  
  4. contents:125  
  5. contents:85  
  6. contents:74  
  7. contents:0  
  8. contents:44  
  9. contents:0  
  10. contents:97  
  11. contents:0  
  12. contents:66  
  13. contents:0  
  14. contents:99  
  15. contents:0  
  16. contents:33  

ios代码:

NSString *str = @"你好啊,aBc!";  
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding
(NSUTF16BigEndianStringEncoding);  
NSData *data = [str dataUsingEncoding:enc];  
Byte *byte = (Byte *)[data bytes];  
for (int i=0 ; i<[data length]; i++) {  
    NSLog(@"byte = %d",byte[i]);  
}

最后打印结果为

[java]
  view plain copy
  1. 2012-07-19 10:07:46.967 encoding[593:f803] byte = 79  
  2. 2012-07-19 10:07:46.969 encoding[593:f803] byte = 96  
  3. 2012-07-19 10:07:46.969 encoding[593:f803] byte = 89  
  4. 2012-07-19 10:07:46.970 encoding[593:f803] byte = 125  
  5. 2012-07-19 10:07:46.970 encoding[593:f803] byte = 85  
  6. 2012-07-19 10:07:46.970 encoding[593:f803] byte = 74  
  7. 2012-07-19 10:07:46.970 encoding[593:f803] byte = 0  
  8. 2012-07-19 10:07:46.971 encoding[593:f803] byte = 44  
  9. 2012-07-19 10:07:46.971 encoding[593:f803] byte = 0  
  10. 2012-07-19 10:07:46.971 encoding[593:f803] byte = 97  
  11. 2012-07-19 10:07:46.971 encoding[593:f803] byte = 0  
  12. 2012-07-19 10:07:46.972 encoding[593:f803] byte = 66  
  13. 2012-07-19 10:07:46.972 encoding[593:f803] byte = 0  
  14. 2012-07-19 10:07:46.972 encoding[593:f803] byte = 99  
  15. 2012-07-19 10:07:46.972 encoding[593:f803] byte = 0  
  16. 2012-07-19 10:07:46.973 encoding[593:f803] byte = 33  
编码达到了一致!

你可能感兴趣的:(关于字符串和byte数组在java和ios之间兼容的解决办法。)