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

iphone里读取gb2312(中文)编码文件或者二进制流。

 
阅读更多
说到文字编码,与文件读写打过交道的软件开发人员应该都知道,比如国际通用:UTF-8编码,ANSCII编码,Unicode编码中文:GB2312,GBK日文,Shift-jis等等。
说了这么多无关紧要的话,技术是来解决实际问题的:
1。如何读取UTF-8编码的文本文件?
2。如何读取GB2312(中文)的文本文件?
3。如何读取其它编码文件?

首先解决第一个问题,
1。如何读取UTF-8编码的文本文件?
NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:fileName];
[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]
//当然也可以采用如下方法
//NSData *data = [NSData dataWithContentsOfFile:filePath];
//NSString *textFile  = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

2。如何读取GB2312(中文)的文本文件?
可能很多人会想到,那还不简单,apple肯定提供了gb2312的文件编码常量,让我们看看有那些常量吧,看看 NSUTF8StringEncoding定义文件,应该会有GB2312的常量定义。
/* Note that in addition to the values explicitly listed below, NSStringEncoding supports encodings provided by CFString.
See CFStringEncodingExt.h for a list of these encodings.
See CFString.h for functions which convert between NSStringEncoding and CFStringEncoding.
*/
enum {
    NSASCIIStringEncoding = 1,      /* 0..127 only */
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,          /* kCFStringEncodingDOSJapanese */
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,    /* Cyrillic; same as AdobeStandardCyrillic */
    NSWindowsCP1252StringEncoding = 12,    /* WinLatin1 */
    NSWindowsCP1253StringEncoding = 13,    /* Greek */
    NSWindowsCP1254StringEncoding = 14,    /* Turkish */
    NSWindowsCP1250StringEncoding = 15,    /* WinLatin2 */
    NSISO2022JPStringEncoding = 21,        /* ISO 2022 Japanese encoding for e-mail */
    NSMacOSRomanStringEncoding = 30,

    NSUTF16StringEncoding = NSUnicodeStringEncoding,      /* An alias for NSUnicodeStringEncoding */

#if MAC_OS_X_VERSION_10_4 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_2_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    NSUTF16BigEndianStringEncoding = 0x90000100,          /* NSUTF16StringEncoding encoding with explicit endianness specified */
    NSUTF16LittleEndianStringEncoding = 0x94000100,       /* NSUTF16StringEncoding encoding with explicit endianness specified */

    NSUTF32StringEncoding = 0x8c000100,                 
    NSUTF32BigEndianStringEncoding = 0x98000100,          /* NSUTF32StringEncoding encoding with explicit endianness specified */
    NSUTF32LittleEndianStringEncoding = 0x9c000100        /* NSUTF32StringEncoding encoding with explicit endianness specified */
#endif
};
很遗憾,我没找到,不过Apple留了个线索让我取找,不过仔细看看它的注释
Note that in addition to the values explicitly listed below, NSStringEncoding supports encodings provided by CFString.
See CFStringEncodingExt.h for a list of these encodings.
See CFString.h for functions which convert between NSStringEncoding and CFStringEncoding.
我的英文比较不好,但大意是看明白了,不在下面支持了编码格式,在CFStringEncodingExt.h 里头文件申明 。
我们通过finder的文件查找方法找到CFStringEncodingExt.h 。
仔细看看确实找到了kCFStringEncodingGB_18030_2000 ( 我以为是kCFStringEncodingGB_2312_80 ,实际上不是) 但是这个是CFStringEncoding类型,我们需要NSEncode的类型。
CFString 和NSString具有相同的内存结构,也是NSString的重要补充,通过查找CFString的帮助文档,找到了这个方法 CFStringConvertEncodingToNSStringEncoding
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *textFile  = [NSString stringWithContentsOfFile:filePath encoding:enc error:nil];
那么第二个问题就解决了 
3。如何读取其它编码文件?  
   相信,通过以上的方法,第三个问题也可以很顺利的解决了。
文章地址:http://www.cnblogs.com/likwo/archive/2011/06/26/2090914.html
分享到:
评论

相关推荐

    解析iphone拷贝到电脑的png图片

    1. **读取文件**:使用C#的`Image.FromStream`方法读取PNG文件的二进制流,加载图像数据。 2. **检查头部信息**:PNG文件的开头是16字节的标识符,包含"PNG"字符和一些版本信息。通过检查这些信息,我们可以判断文件...

    plist文件示例程序

    这种文件通常包含XML或二进制数据,用来保存应用程序的配置信息、用户设置或者轻量级的数据结构。在iOS开发中,Plist文件尤其常见,因为它们提供了简单的方式来管理应用中的数据。 ### Plist文件结构 Plist文件...

    ios libjpeg .a静态库

    2. JPEG图像编码:将RGB或灰度图像数据压缩成JPEG格式的二进制流。 3. 错误处理:提供了一套完整的错误处理机制,包括错误检测、报告和恢复。 4. 过滤器和优化:支持多种图像过滤选项,以及压缩质量的调整,帮助...

    adpcm编解码 c++编写

    - 位编码:将非线性代码转换为二进制位流,以便存储或传输。 2. ADPCM解码原理: - 位解码:从二进制位流中恢复非线性代码。 - 反非线性量化:将非线性代码转换回线性差分值。 - 步长更新:根据编码时的步长...

    A8_Transformer_a8Reader_

    压缩包中的"A8_Transformer"文件可能是整个工具的源代码、编译后的二进制文件、文档或者其他相关资源。"Transformer"通常指的是转换或处理数据的组件,这里可能是对A8寄存器数据进行转换的工具,例如将原始的二进制...

    C语言仿写iPhone IOS汤姆猫变声源代码

    7. **文件操作**:处理音频文件时,需要了解如何在C语言中进行文件的读写操作,以及如何处理二进制文件。 8. **调试技巧**:学会使用GDB或其他调试工具对C语言代码进行调试,找出并修复问题。 这些知识点涵盖了从...

    unity打开ios相册读取图片传到unity解析

    这是因为Unity需要二进制图像数据,而不是原始的iOS图像对象。 5. **传递数据回Unity**:将转换后的图像数据通过Unity的`UnitySendMessage`函数发送回Unity,这是一个原生方法,可以将数据作为字符串参数传递。在...

    IOS 文件读写操作详解及简单实例

    - 从`NSData`对象中解析出原始数据,例如,可以使用`getBytes:length:`方法获取二进制数据,`initWithData:encoding:`方法将数据转换回字符串。 在实际应用中,根据数据类型的不同,可能需要使用不同的方法来读取和...

    JAVA上百实例源码以及开源项目源代码

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    enlighten:使用 LED 和 iPhone 摄像头的视觉光通信

    通过改变LED的亮度或颜色变化频率,可以编码不同的二进制数据。例如,快速闪烁可能代表“1”,慢速闪烁表示“0”。这种编码方式要求精确的时间控制和同步机制,以确保数据的正确传输。 2. **iPhone摄像头解码**: ...

    Plist.net-开源

    它还处理了二进制数据的编码和解码。 3. **简便的API**: 通过提供简单的面向对象的接口,Plist.net使得开发者可以轻松地创建、修改和读取PropertyList文件,而无需深入理解XML的底层细节。 4. **平台兼容性**: ...

    Cocoa框架-中文版

    - **数据块管理**:处理二进制数据。 - **首选项管理**:用于保存应用设置。 - **线程和循环**:支持多线程编程。 - **URL和流处理**:网络请求和数据传输。 - **Bonjour**:本地网络发现服务。 - **通信端口管理**...

    libplist-1.8.zip_网络_Unix_Linux_

    - 编码和解码:libplist提供API来将plist对象编码为XML或二进制,以及将这两种格式解码回原始数据结构。 - 错误处理:在读写过程中,必须妥善处理可能出现的错误,如文件不存在、格式不正确等。 libplist对于那些...

    移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

    3. **返回数据格式**:压缩后的图片以 Base64 编码的形式返回,可以直接用作 AJAX 数据,避免了二进制数据在网络中的复杂传输。 4. **AJAX 上传**:`lrz` 会提供一个 JSON 格式的对象,包含了所有必要的信息(如...

    ios 二维码sdk,整合支持armv7s,合并了模拟器和真机libzbar.a,ZBarSDK

    通过使用胖二进制文件(fat binary)技术,可以创建一个包含所有必要架构的库,使得同一个libzbar.a文件可以在模拟器和真机上同时使用。 **4. 集成ZBarSDK步骤** 集成ZBarSDK到iOS项目中,一般遵循以下步骤: - ...

    HTML5实现微信拍摄上传照片功能

    5. **Base64编码**:这是一种将二进制数据转换为ASCII字符串的编码方式。在这个案例中,`toDataURL`返回的Data URL包含了"data:image/jpeg;base64,"前缀,后面的字符串是Base64编码的图片数据。在发送到服务器时,...

    ZBarDemo:真机,模拟器都能运行 i380,arm64 armv7 armv7s

    为了实现这一目标,开发者在编译时需要针对不同架构分别构建二进制文件,并使用iOS的Fat Binary技术将它们合并在一起。Fat Binary允许一个应用包含多个不同架构的代码,系统会自动选择合适的版本运行,确保应用在...

    H5调用相机拍照并压缩图片的实例代码

    使用XMLHttpRequest或Fetch API发送POST请求,将Base64数据作为二进制数据发送。同时,也可以在前端展示服务器返回的结果。 7. **兼容性和优化**: 为了确保在不同设备和浏览器上的兼容性,需要考虑各种可能的异常...

    iOSPrinter:iOS 蓝牙连接便携式热敏打印机 打印Demo (测试设备 佳博 ZH-380)

    6. **数据格式化**:由于佳博ZH-380是一款热敏打印机,我们需要根据其支持的指令集(通常是非标准的ASCII或二进制格式)来构造打印命令。这可能涉及到对文本进行编码、换行符转换以及条形码和图形的支持。 7. **...

Global site tag (gtag.js) - Google Analytics