【问题标题】:create an UTF-8 string with BOM使用 BOM 创建一个 UTF-8 字符串
【发布时间】:2011-02-04 19:33:50
【问题描述】:

我正在使用 MD5 函数和 Base64 编码生成用户密钥(用于登录所用 API 的数据层)

我在javascript 中编写了代码,这很好,但在 Objective C 中我正在努力处理 BOM

我的代码是:

NSString *str = [[NSString alloc] 
                 initWithFormat:@"%@%@%@%d", 
                    [auth uppercaseString], 
                    [user uppercaseString], 
                    [pwd uppercaseString], 
                    totalDaysSince2000];

NSString *sourceString = [[NSString alloc] initWithFormat:@"%02x%02x%02x%@", 
                          0xEF, 
                          0xBB, 
                          0xBF, 
                          str]; 

NSString *strMd5 = [sourceString MD5]; 

NSData *sourceData = [strMd5 dataUsingEncoding:NSUTF8StringEncoding];  
NSString *base64EncodedString = [[sourceData base64EncodedString] autorelease];  

使用上面的代码我正在进入内存:


(来源:balexandre.com

女巫不是我真正需要的……

我什至尝试过

"%c%c%c%@", (char)239, (char)187, (char)191, str

没有运气......

使用UTF8String 不会像在 C# 中那样自动缝合附加 BOM :-(

如何正确附加 BOM?

【问题讨论】:

    标签: objective-c cocoa-touch utf-8 byte-order-mark


    【解决方案1】:

    我在使用 Swift 和在 Excel 中打开 CSV 文件时遇到了类似的问题。 This question也帮了我很多。

    使用 CSV 文件进行 swift 的简单解决方案:

    let BOM = "\u{FEFF}"
    csvFile.append(BOM)
    

    【讨论】:

      【解决方案2】:

      您可能必须将 BOM 添加到 NSData 对象,而不是 NSString。像这样的:

      char BOM[] = {0xEF, 0xBB, 0xBF};
      NSMutableData* data = [NSMutableData data];
      [data appendBytes:BOM length:3];
      [data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
      

      【讨论】:

        【解决方案3】:

        尝试将 BOM 作为转义字符直接嵌入格式字符串中:

        NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
        

        【讨论】:

          猜你喜欢
          • 2015-02-15
          • 2019-03-08
          • 2013-07-26
          • 2011-08-01
          • 2011-05-05
          • 1970-01-01
          • 2020-09-15
          • 2017-01-24
          相关资源
          最近更新 更多