【问题标题】:ASCII String Encoding issue with special characters特殊字符的 ASCII 字符串编码问题
【发布时间】:2012-09-28 15:03:02
【问题描述】:

在我的应用程序中,我使用 ASCII 字符串编码将 NSString 转换为 NSData。对于以下情况,我无法将字符串转换为数据,因为它包含一些特殊字符。我可以使用 UTF 8 正确编码,但我需要使用 ascii,因为服务器也配置为使用 ASCII。

NSData *ldata=[@"CASTAÑO" dataUsingEncoding:NSASCIIStringEncoding];

请帮我解决这个问题。

提前致谢

【问题讨论】:

    标签: iphone ios utf-8 ascii


    【解决方案1】:

    您的意思是您希望在您的 NSData 中将“CASTAÑO”转换为“CASTANO”吗?

    使用dataUsingEncoding:allowLossyConversion:

    如:

    NSData *ldata=[@"CASTAÑO" dataUsingEncoding:NSASCIIStringEncoding
                           allowLossyConversion:YES];
    

    【讨论】:

    • 有什么方法可以发送 CASTAÑO 本身而不是 CASTANO,因为在服务器端他们正在寻找 CASTAÑO 本身以在数据库中进行搜索
    • 不是 ASCII,不是(Ñ 不是 ASCII 字符)。
    • 请注意,Ñ 是扩展 ASCII (165),因此提出了服务器真正想要什么的问题。如果它需要 7 位 ASCII,则无法发送 Ñ。如果它需要 8 位扩展 ASCII,则 UTF-8 将匹配合法的扩展 ASCII 字符。您唯一应该遇到问题的地方是字符超出扩展的 ASCII 字符集(无论如何这对您不起作用)。
    【解决方案2】:

    如何使用 MIME 传输您的数据? MIME 是使用 ASCII 字符对各种文件类型进行编码的标准方法。 它通常用于使用不支持任何非 ASCII 数据的 SMTP 协议发送非 ASCII 电子邮件。

    有一些类别可以扩展 NSData/NSString 以使用 MIME 对数据进行编码(这将导致 ASCII 字符。)我认为这不是您的即时解决方案,但根据您的限制(仅 ASCII 的服务器),MIME应该是最好的解决方案。

    见: http://www.mulle-kybernetik.com/software/EDFrameworks/download.html#EDMessagehttp://bitbucket.org/portablek/mimekit/overview

    【讨论】:

      【解决方案3】:

      即使服务器配置为使用 ASCII,我也能够使用 NSISOLatin1StringEncoding 对数据进行编码和解码。

      NSData *ldata=[@"CASTAÑO" dataUsingEncoding:NSISOLatin1StringEncoding];

      特殊字符 'Ñ' 是扩展的 ascii 字符,不会被 ASCII 编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 1970-01-01
        • 2020-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多