`
niCe
  • 浏览: 42154 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

iPhone上读取ansi字符串的例子

阅读更多

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];

 

分享到:
评论

相关推荐

    iphone背景的字符串显示框

    labview控件 字符串显示控件 前面板装饰

    Objective-c中的字符串格式化输出

    在Objective-C中,字符串格式化输出是编程时常见的任务,特别是在iPhone开发中,开发者经常需要在控制台上打印信息以调试程序。Objective-C提供了类似于C语言的printf函数的字符串格式化方法,但它是通过`NSString`...

    iphone手机获取device id即UDID的方法

    iPhone 设备的唯一标识符,通常被称为UDID(Unique Device Identifier),是一个16进制的字符串,用于区分不同的iOS设备。UDID对于开发者、企业内部管理以及应用分发等场景至关重要。以下是一份详细的指南,教你如何...

    iPhone获取手机型号Python代码

    3. **解析User-Agent**:在服务器端,Python脚本会接收到User-Agent字符串,然后通过正则表达式或字符串操作来提取iPhone型号。例如,对于上述User-Agent,我们可以通过查找`iPhone`后面的数字来识别型号。 ```...

    Swift-获取iphone型号

    总之,使用Swift获取iPhone型号主要依赖于`UIDevice`类,通过解析`model`属性返回的字符串并与已知的硬件标识符进行匹配。同时,还可以获取到设备类型、系统名称和版本等信息,以实现更加精细化的iOS应用开发。

    iphone生命周期 详解

    Objective-C中的字符串处理主要包括获取字符串长度、字符串连接、字符串修改(如插入、删除)、字符串比较以及检索字符串等操作。 1. **获取字符串长度**:使用`-[NSString length]`方法。 ```objective-c ...

    一个 Python 库,通过解析(浏览器)用户代理字符串,可以轻松识别手机、平板电脑等设备及其功能 .zip

    安装user-agents托管在PyPI上,可以按如下方式安装pip install pyyaml ua-parser user-agents或者,您也可以从Github获取最新的源代码并手动安装。用法browser您可以通过、device和属性来访问各种可帮助您识别访客的...

    iphone天气预报例子

    这个"iphone天气预报例子"很可能是包含了一个示例项目,用于演示如何在iPhone上获取并显示实时天气信息。以下是一些相关的知识点: 1. **Swift编程语言**:大部分现代的iOS应用都是用Apple的Swift语言编写的。因此...

    iphone Socket通信例子

    在这个“iPhone Socket通信例子”中,我们将探讨如何在iOS(iPhone)平台上利用Socket进行数据传输,以及与Mac平台上的服务端进行交互。首先,我们需要理解Socket的基本概念。 Socket,又称为套接字,是网络通信的...

    iphone UDP 聊天例子

    这可能涉及字符串解码、JSON解析等操作。 6. **多线程**:由于网络操作通常在后台线程执行,我们需要确保UI更新是安全的。可以使用`dispatch_async`(Objective-C)或`DispatchQueue.main.async`(Swift)来在主线...

    java 生成xml并转为字符串的方法

    最后,我们可以使用 `ByteArrayOutputStream` 对象获取生成的字符串: ```java String xmlString = bos.toString(); ``` 完整示例 下面是一个完整的示例代码,演示如何使用 Java 生成 XML 并将其转换为字符串: ...

    iphone存储用法汇总

    从给定的文件标题“iPhone存储用法汇总”和描述“PDF中包含有iOS数据的存储类型详细介绍”,我们可以深入探讨iOS开发中常见的数据存储技术,特别是对于基础数据类型的使用,如字符串、数组和字典。以下是对这些核心...

    IPhone FTP上传的例子

    "IPhone FTP上传的例子"是一个示例项目,展示了如何在iPhone应用中使用FTP连接并进行文件上传及创建目录的操作。这个SimpleFTPSample项目经过编译并在真机上进行了测试,确保了其功能的正常运行。 FTP工作原理: ...

    iphone/ipad解压压缩的例子

    本例子聚焦于如何在iPhone和iPad上进行文件的解压缩操作,这对于优化应用程序性能和节省存储空间至关重要。 在iOS中,我们主要依赖于Foundation框架中的`NSFileManager`, `NSData`, 和 ` zlib` 库来处理压缩文件。`...

    iphone url获取

    在iOS开发中,获取URL是常见的任务,尤其对于iPhone应用来说。这可能涉及到与服务器通信、数据下载或者实现深层链接等功能。以下是一些关于“iPhone URL获取”相关的知识点: 1. **URL对象**:在iOS中,URL...

    获取iphone的硬件版本以及系统信息小例子源码

    `model`属性返回的是一个本地化的字符串,例如"iPhone 12 Pro Max",而`identifierForVendor`则是一个唯一标识符,用于区分同一应用在不同设备上的安装。 ```objc NSString *deviceModel = [[UIDevice current...

    iphone文件下载模块代码例子

    在iOS开发中,iPhone文件下载模块是至关重要的一个部分,特别是在构建移动应用时,用户可能需要从服务器上获取各种文件,如图片、音频、视频、文档等。`FFDownloadManager`是一个可能的自定义下载管理器类名,用于...

    iPhone播放mp3文件的例子

    iPhone播放mp3文件的例子 - iPhone-iPad

    从IPhone照片库或照相机获取图像的例子

    通过以上步骤,我们就可以在iOS应用中使用`UIImagePickerController`从iPhone的照片库或照相机获取图像了。这个组件使得用户可以方便地与应用共享他们的视觉体验,为应用增加了更多互动性。在实际开发中,可以根据...

    Get-iOS-Model:使用hw.machine字符串获取iOS模型

    获取iOS模型使用hw.machine字符串获取iOS模型包裹 当新设备可用时,将使存储库保持更新。 如果您需要Android库,请查看我的其他仓库 。 更新: 20201212-添加了最新的iPad和iPhone型号20200404-添加了iPhone SE(第...

Global site tag (gtag.js) - Google Analytics