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开发中,开发者经常需要在控制台上打印信息以调试程序。Objective-C提供了类似于C语言的printf函数的字符串格式化方法,但它是通过`NSString`...
iPhone 设备的唯一标识符,通常被称为UDID(Unique Device Identifier),是一个16进制的字符串,用于区分不同的iOS设备。UDID对于开发者、企业内部管理以及应用分发等场景至关重要。以下是一份详细的指南,教你如何...
3. **解析User-Agent**:在服务器端,Python脚本会接收到User-Agent字符串,然后通过正则表达式或字符串操作来提取iPhone型号。例如,对于上述User-Agent,我们可以通过查找`iPhone`后面的数字来识别型号。 ```...
总之,使用Swift获取iPhone型号主要依赖于`UIDevice`类,通过解析`model`属性返回的字符串并与已知的硬件标识符进行匹配。同时,还可以获取到设备类型、系统名称和版本等信息,以实现更加精细化的iOS应用开发。
Objective-C中的字符串处理主要包括获取字符串长度、字符串连接、字符串修改(如插入、删除)、字符串比较以及检索字符串等操作。 1. **获取字符串长度**:使用`-[NSString length]`方法。 ```objective-c ...
安装user-agents托管在PyPI上,可以按如下方式安装pip install pyyaml ua-parser user-agents或者,您也可以从Github获取最新的源代码并手动安装。用法browser您可以通过、device和属性来访问各种可帮助您识别访客的...
这个"iphone天气预报例子"很可能是包含了一个示例项目,用于演示如何在iPhone上获取并显示实时天气信息。以下是一些相关的知识点: 1. **Swift编程语言**:大部分现代的iOS应用都是用Apple的Swift语言编写的。因此...
在这个“iPhone Socket通信例子”中,我们将探讨如何在iOS(iPhone)平台上利用Socket进行数据传输,以及与Mac平台上的服务端进行交互。首先,我们需要理解Socket的基本概念。 Socket,又称为套接字,是网络通信的...
这可能涉及字符串解码、JSON解析等操作。 6. **多线程**:由于网络操作通常在后台线程执行,我们需要确保UI更新是安全的。可以使用`dispatch_async`(Objective-C)或`DispatchQueue.main.async`(Swift)来在主线...
最后,我们可以使用 `ByteArrayOutputStream` 对象获取生成的字符串: ```java String xmlString = bos.toString(); ``` 完整示例 下面是一个完整的示例代码,演示如何使用 Java 生成 XML 并将其转换为字符串: ...
从给定的文件标题“iPhone存储用法汇总”和描述“PDF中包含有iOS数据的存储类型详细介绍”,我们可以深入探讨iOS开发中常见的数据存储技术,特别是对于基础数据类型的使用,如字符串、数组和字典。以下是对这些核心...
"IPhone FTP上传的例子"是一个示例项目,展示了如何在iPhone应用中使用FTP连接并进行文件上传及创建目录的操作。这个SimpleFTPSample项目经过编译并在真机上进行了测试,确保了其功能的正常运行。 FTP工作原理: ...
本例子聚焦于如何在iPhone和iPad上进行文件的解压缩操作,这对于优化应用程序性能和节省存储空间至关重要。 在iOS中,我们主要依赖于Foundation框架中的`NSFileManager`, `NSData`, 和 ` zlib` 库来处理压缩文件。`...
在iOS开发中,获取URL是常见的任务,尤其对于iPhone应用来说。这可能涉及到与服务器通信、数据下载或者实现深层链接等功能。以下是一些关于“iPhone URL获取”相关的知识点: 1. **URL对象**:在iOS中,URL...
`model`属性返回的是一个本地化的字符串,例如"iPhone 12 Pro Max",而`identifierForVendor`则是一个唯一标识符,用于区分同一应用在不同设备上的安装。 ```objc NSString *deviceModel = [[UIDevice current...
在iOS开发中,iPhone文件下载模块是至关重要的一个部分,特别是在构建移动应用时,用户可能需要从服务器上获取各种文件,如图片、音频、视频、文档等。`FFDownloadManager`是一个可能的自定义下载管理器类名,用于...
iPhone播放mp3文件的例子 - iPhone-iPad
通过以上步骤,我们就可以在iOS应用中使用`UIImagePickerController`从iPhone的照片库或照相机获取图像了。这个组件使得用户可以方便地与应用共享他们的视觉体验,为应用增加了更多互动性。在实际开发中,可以根据...
获取iOS模型使用hw.machine字符串获取iOS模型包裹 当新设备可用时,将使存储库保持更新。 如果您需要Android库,请查看我的其他仓库 。 更新: 20201212-添加了最新的iPad和iPhone型号20200404-添加了iPhone SE(第...