相关疑难解决方法(0)

使用BOM创建UTF-8字符串

我正在使用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];  
Run Code Online (Sandbox Code Playgroud)

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

替代文字http://www.balexandre.com/temp/2010-04-06_1523.png

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

我甚至尝试过

"%c%c%c%@", (char)239, (char)187, (char)191, str
Run Code Online (Sandbox Code Playgroud)

没有运气......

使用UTF8String不接缝自动附加BOM,如在C#中:-(

如何正确附加BOM?

cocoa-touch byte-order-mark objective-c utf-8

6
推荐指数
2
解决办法
5109
查看次数

iOS:ZBar SDK Unicode 字符

使用 ZBar 扫描 QR 码时,该过程产生的字符串无法正确显示 unicode 字符。任何免费使用的二维码生成器(如http://qrcode.kaywa.com)将单词Márti编码为二维码将导致M??rti

在其他 SO 问题 ( 1 , 2 ) 中,建议在结果字符串的开头嵌入 BOM,但这样做:

NSString *qrString = [NSString stringWithFormat:@"\xEF\xBB\xBF%@",symbol.data];
Run Code Online (Sandbox Code Playgroud)

或这个:

NSString *qrString = [[NSString alloc] initWithFormat:@"\357\273\277%@", symbol.data];
Run Code Online (Sandbox Code Playgroud)

导致了与亚洲性格相同的、有缺陷的结果。symbol.data是由 ZBar 提供的结果 NSString。

更新:根据 dda 的回答,解决方案如下:

NSString *qrString = symbol.data;
//look for misinterpreted acute characters and convert them to UTF-8
if ([qrString canBeConvertedToEncoding:NSShiftJISStringEncoding]) {
  qrString = [NSString stringWithCString:[symbol.data cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud)

unicode qr-code objective-c ios zbar

5
推荐指数
1
解决办法
2425
查看次数