之前在java上寫過String轉為byte數組的代碼,后來在開發iPhone程序的時候,發現也需要把NSString轉為byte數組,并且需要達到跟java程序兼容。但是發現java自身的默認編碼機制為iso-8859-1,而ios的默認編碼機制為utf-8,所以直接編碼并不能達到兩者兼容的問題。后來查閱相關資料,最后解決了編碼兼容的問題,而且中英文都通用。
如下為java代碼:
String?str?=?"你好啊,aBc!";??
ByteArrayOutputStreambaos?=?new?ByteArrayOutputStream();??
DataOutputStreamoutputstream?=?new?DataOutputStream(baos);??
outputstream.writeChars(str);??
byte[]contents?=?baos.toByteArray();??
for?(inti?=?0;?i?<?contents.length;?i++)?{??
????System.out.println("contents:"+contents[i]);??
}??
最后打印為:
contents:79??
contents:96??
contents:89??
contents:125??
contents:85??
contents:74??
contents:0??
contents:44??
contents:0??
contents:97??
contents:0??
contents:66??
contents:0??
contents:99??
contents:0??
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]);??
}??
最后打印結果為
2012-07-19?10:07:46.967?encoding[593:f803]?byte?=?79??
2012-07-19?10:07:46.969?encoding[593:f803]?byte?=?96??
2012-07-19?10:07:46.969?encoding[593:f803]?byte?=?89??
2012-07-19?10:07:46.970?encoding[593:f803]?byte?=?125??
2012-07-19?10:07:46.970?encoding[593:f803]?byte?=?85??
2012-07-19?10:07:46.970?encoding[593:f803]?byte?=?74??
2012-07-19?10:07:46.970?encoding[593:f803]?byte?=?0??
2012-07-19?10:07:46.971?encoding[593:f803]?byte?=?44??
2012-07-19?10:07:46.971?encoding[593:f803]?byte?=?0??
2012-07-19?10:07:46.971?encoding[593:f803]?byte?=?97??
2012-07-19?10:07:46.971?encoding[593:f803]?byte?=?0??
2012-07-19?10:07:46.972?encoding[593:f803]?byte?=?66??
2012-07-19?10:07:46.972?encoding[593:f803]?byte?=?0??
2012-07-19?10:07:46.972?encoding[593:f803]?byte?=?99??
2012-07-19?10:07:46.972?encoding[593:f803]?byte?=?0??
2012-07-19?10:07:46.973?encoding[593:f803]?byte?=?33??
編碼達到了一致!