iPhone的NSString并不支持ansi的字符串(比如咱们常用的gb2312), 因此如果要读取的话, 需要转换为UTF-8的
而iPhone上自带了libiconv库, 于是这个转换变的就比较简单了
首先在工程的Framework部分加入 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/libiconv.dylib
当然, 中间那个iPhoneOS3.0.sdk需要换成你当前使用的SDK版本
实际转换过程也就4步.
1, 引入iconv库并添加头文件
2, 利用iconv_open设置from和to的字符串编码
3, 执行iconv进行转换
4, 利用iconv_close关闭iconv_open创建的实例.
基本上就是下面的代码片段中 code_convert中的逻辑了.
#include <iconv.h>
int code_convert(char *from_charset, char *to_charset, char *inbuf, size_t inlen, char *outbuf, size_t outlen) {
iconv_t cd = NULL;
cd = iconv_open(to_charset, from_charset);
if(!cd)
return -1;
memset(outbuf, 0, outlen);
if(iconv(cd, &inbuf, &inlen, &outbuf, &outlen) == -1)
return -1;
iconv_close(cd);
return 0;
}
int u2g(char *inbuf, size_t inlen, char *outbuf, size_t outlen) {
return code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, outlen);
}
int g2u(char *inbuf, size_t inlen, char *outbuf,size_t outlen) {
return code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, outlen);
}
而在实际应用时, 无论从文件或者网络读取, 都要获取成NSData或者char *或void *, 至少不能是NSString, 因为NSString无法直接处理.
以获取成NSData为例.
+ (NSString *)getANSIString:(NSData *)ansiData {
char *ansiString = [ansiData bytes];
int ansiLen = [ansiData length];
int utf8Len = ansiLen * 2; //其实*1.5基本就够了
char *utf8String = (char *)malloc(utf8Len);
memset(utf8String, 0, utf8Len); //虽然code_convert中也memset了, 但还是自己分配后就set一次比较好
int result = code_convert("gb2312", "utf-8", ansiString, ansiLen, utf8String, utf8Len);
if(result == -1) {
free(utf8String);
return nil;
}
NSString *retString = [NSString stringWithUTF8String:utf8String];
free(utf8String);
return retString;
}
下面方法也可行:
NSStringEncoding myEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString* postStr = [NSString stringWithFormat:@"isbn=%@",ISBNStr];
NSData* postData = [postStr dataUsingEncoding:myEncoding];
分享到:
相关推荐
labview控件 字符串显示控件 前面板装饰
关于objective-c中输出字符串的格式,iphone开发中控制台输出
iphone文件下载模块代码例子文件下载模块代码例子文件下载模块代码例子文件下载模块代码例子文件下载模块代码例子文件下载模块代码例子
Iphone UDP 聊天例子 代码例子
【应用】iPhone日历控件.zipIOS应用例子源码下载【应用】iPhone日历控件.zipIOS应用例子源码下载 1.适合学生学习研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
使用UIImagePickerController从IPhone照片库或照相机获取图像的例子。
iphone/ipad不支持十六进制的颜色表示,所以需要对UIColor进行处理
iPhone播放声音的例子iPhone播放声音的例子iPhone播放声音的例子iPhone播放声音的例子
iphone 音乐程序例子iphone 音乐程序例子
iphone Socket 通信 例子 里面有mac下面的服务端 经测试完全可以可以运行
iphone界面官方例子,里面包含基本所有iphone界面有关的控件的使用,button,label等等
iphone打开pdf文件代码例子,iphone打开pdf文件代码例子
iphone url获取 iphone url获取 iphone url获取iphone url获取iphone url获取iphone url获取
iphone开发计算器例子
iPhone播放mp3文件的例子 - iPhone-iPad
自己写的编码转换器,网上的不是不好用就是功能太复杂,于是自己写了个非常简单版的,就是把目录下的所有编码为ansi的txt转换成utf. 做这个的原因:iphone上我觉得最好用的读书软件goodreader不支持ansi
一个使用ZXing库实现二维码扫描、自定义扫描控件及二维码生成的例子。项目中包含了ZXing自带扫描控件的使用,自定义扫描控件的界面,从相册中读取照片解析二维码,以及生成二维码的功能。解码使用ZXing库,编码使用...
iphone 开发入门例子 helloworld
iphone协议的Demo例子,简单介绍协议的用法,便于理解协议
iphone天气预报,iphone,天气预报,IPHONE resource