创建带有 BOM 的 UTF-8 字符串

发布于 2024-08-28 00:52:23 字数 1408 浏览 9 评论 0 原文

我使用 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];  

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

alt text
(来源:balexandre.com

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

我什至尝试过但

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

没有运气...

使用 UTF8String 并不像 C# 那样自动附加 BOM :-(

如何正确附加 BOM ?

I'm using MD5 function and Base64 Encoding to generate a User Secret (used to login to data layer of the used API)

I did the code in javascript and it's fine, but in Objective C I'm strugling with the BOM

my code is:

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];  

using the code above I'm getting into the memory:

alt text
(source: balexandre.com)

witch is not what I really need...

I even tried with

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

with no luck...

using UTF8String does not seam to append the BOM automatically as in C# :-(

How can I append the BOM correctly ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无声无音无过去 2024-09-04 00:52:23

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

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

Try embedding the BOM directly in the format string as escaped character literals:

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
站稳脚跟 2024-09-04 00:52:23

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

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

You might have to add the BOM to the NSData object, not the NSString. Something like this:

char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
陈年往事 2024-09-04 00:52:23

我在使用 Swift 和在 Excel 中打开 CSV 时遇到了类似的问题。
这个问题也对我有很大帮助。

快速使用 CSV 文件的简单解决方案:

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

I had similar issue with Swift and opening CSV fime in Excel.
This question also helped me a lot.

Simple solution for swift with CSV file:

let BOM = "\u{FEFF}"
csvFile.append(BOM)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文