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

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

如下为java代码:

		String str = "你好啊,aBc!";
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		DataOutputStream outputstream = new DataOutputStream(baos);
		outputstream.writeChars(str);

		byte[] contents = baos.toByteArray();
		for (int i = 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

编码达到了一致!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值