【问题标题】:encode NSString to CP1252 / windows1252将 NSString 编码为 CP1252 / windows1252
【发布时间】:2014-07-22 17:06:57
【问题描述】:

全部,

我有一个NSString,其字符为 UTF8 格式。我想将此解码为 CP1252 / Windows-1252 格式。 采取的行动:
- 将NSString 转换为字节数组(UTF8 解码)
- 将字节数组编码为 CP1252 / windows1252 格式字节数组
- 从字节数组中读取第一个元素

我该怎么做?看了很多关于CFstring的文档,还是看不懂。

我做了什么:

    NSString *tileData = @"4¬";

NSNumber *value = [NSNumber numberWithInt:[[tileData substringWithRange:NSMakeRange(0, 1)] intValue]];
NSString *pos = [tileData substringWithRange:NSMakeRange(1, 1)];


// first attempt: create byte-array from NSString into UTF8. Then create NSString in CP1252 format.
    NSData *data = [pos dataUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"Data =%@",data);
    NSString *htmlSTR = [[NSString alloc] initWithData:data
                                              encoding:NSWindowsCP1252StringEncoding]; 
    NSLog(@"htmlSTR =%@", htmlSTR);
    NSData *data2 = [htmlSTR dataUsingEncoding:NSWindowsCP1252StringEncoding];
    NSLog(@"Data2 =%@",data2);


// second attempt: create byte-array from NSString into CP1252. Then create NSString in CP1252 format.
    NSData *data11 = [pos dataUsingEncoding:NSWindowsCP1252StringEncoding];
    NSLog(@"Data11 =%@",data11);
    NSString *htmlSTR2 = [[NSString alloc] initWithData:data11
                                              encoding:NSWindowsCP1252StringEncoding]; 
    NSLog(@"htmlSTR2 =%@", htmlSTR2);
    NSData *data21 = [htmlSTR2 dataUsingEncoding:NSWindowsCP1252StringEncoding];
    NSLog(@"Data21 =%@",data21);

希望有人可以帮助我或有一个例子。

【问题讨论】:

  • 你了解不是所有的 UTF-8 (Unicode) 字符串都可以编码成 CP1252 吗?
  • NSWindowsCP1252StringEncoding?那是你要找的吗?你试过什么?你自己搜索了一下吗?
  • 我搜索了很多,尝试了很多可能的解决方案。当然!我知道编码,但是如何对字符串进行编码并使用位数组?

标签: objective-c nsstring encode


【解决方案1】:

解决方案:

NSString *tileData = @"4æ";
NSNumber *value = [NSNumber numberWithInt:[[tileData substringWithRange:NSMakeRange(0, 1)] intValue]];
NSString *pos = [tileData substringWithRange:NSMakeRange(1, 1)];

int position = [tileData  characterAtIndex:1];

if (position > 128) {

    NSData *data = [pos dataUsingEncoding:NSUTF8StringEncoding];
    NSString *htmlSTR = [[NSString alloc] initWithData:data
                                              encoding:NSWindowsCP1252StringEncoding];
    NSData *data2 = [htmlSTR dataUsingEncoding:NSWindowsCP1252StringEncoding];

    uint8_t *bytes = (uint8_t *)[data2 bytes];
    NSMutableString *posstring = [NSMutableString stringWithCapacity:3];
    [posstring appendFormat:@"%d", bytes[1]];
    NSNumber *posgroot;
    posgroot = [NSNumber numberWithInt:[posstring intValue]];
    position = [posstring intValue];
    if (position <0) position +=256;
}

奇怪的是 UTF8 和 ASCII 之间的区别: http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dechttp://www.asciitable.com

另外,我不确定最好的解决方案是先编码为 NSData,然后编码为 NSString,再编码为 NSDATA。

但这暂时有效!

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 2021-06-14
    • 2015-03-18
    • 1970-01-01
    • 2010-10-22
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多