iOS UTF7编码/解码

时间:2013-03-01 16:26:40

标签: ios encoding utf-7

我有UTF7解码的问题。我能够找出问题,创建以下示例代码:

NSStringEncoding stringEncoding = myFunctionForTranslateCodepageToEncoding(codePage);
// see the end of the string, it's important
const char * testBuffer ="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa+ADw-";

NSString * testString = [[NSString alloc] initWithBytes:testBuffer length:strlen(testBuffer) encoding:stringEncoding];

其中:

strlen(testBuffer)是508,

'codePage'是65000,

'stringEncoding'是2214592768(可能是UTF-7,正如预期的那样,但我找不到明确的确认......)。

'+ ADw-'是'<'。

的UTF7序列

在此示例中,testString始终为nil,因此转换失败。 但这里有一些奇怪的事情:

  1. 当我从testBuffer中删除一个'a'时,转换 工作,testString正确创建。当我添加一个或多个 'a',它不起作用。
  2. 当我'损坏'末尾的utf7编码符号时(本例中唯一一个'+ ADw-'),它可以正常工作。我可以将其更改为“.ADw-”或“+ ADw”。并正确转换缓冲区。当然,'损坏'符号不会被解码,它只是按字面编写,但转换有效。它在NSString中生成“... aaaaa.ADw-”。我也可以将缓冲区减少1,所以我将“... aaaaa + ADw”并且它也将被正确转换(因为UTF7符号不完整)。
  3. 当我在缓冲区的末尾添加任何ASCII字符时,在UTF7符号之后,它可以正常工作。所以我。 “... aaaaa + Adw-a”被转换为NSString“... aaa> a”。
  4. 当缓冲区包含更多UTF7符号时,它的长度 开始失败的变化。所以它不总是508个或更多字符。
  5. 我最后可以使用任何其他UTF7符号。没关系。
  6. 我也尝试用initWithCString替换initWithBytes:方法。我没有检查所有可能的情况,但在所有测试的情况下,它的行为与initWithBytes相同:我在iOS 6.0上进行了测试。

    您对如何正确处理UTF7编码的字符串有什么想法吗?

0 个答案:

没有答案