Objective c 如何编码或转换NSData对象

Objective c 如何编码或转换NSData对象,objective-c,ascii,nsdata,Objective C,Ascii,Nsdata,我正在用Objective-C开发一个iOS应用程序,它使用一个可以读取磁条的阅读器。我正在使用他们的SDK。当我扫描一张卡时,我收到一个NSData对象,它是用标准ASCII编码的 不幸的是,我正在扫描一张丹麦医疗卡,它似乎是用不同的ASCII编码的,可能是ISO/IEC 646:1991挪威语/丹麦语 例如,当医疗卡上的人名包含Ø时,显示为\。这是因为卡上使用的编码使用十进制92表示Ø(参见上面的链接),而标准ASCII十进制92的计算结果为char\。因此,如果名称包含特殊字符,如Æ、Ø

我正在用Objective-C开发一个iOS应用程序,它使用一个可以读取磁条的阅读器。我正在使用他们的SDK。当我扫描一张卡时,我收到一个NSData对象,它是用标准ASCII编码的

不幸的是,我正在扫描一张丹麦医疗卡,它似乎是用不同的ASCII编码的,可能是ISO/IEC 646:1991挪威语/丹麦语

例如,当医疗卡上的人名包含
Ø
时,显示为
\
。这是因为卡上使用的编码使用十进制92表示Ø(参见上面的链接),而标准ASCII十进制92的计算结果为char
\
。因此,如果名称包含特殊字符,如Æ、Ø和Å,则无法读取名称


我的问题是,;如何将NSData对象转换/编码为正确的格式?

尝试使用NSString-initWithBytes:length:encoding:

尝试以下操作:


[NSString stringWithData:数据编码:NSUTF8StringEncoding]
不幸的是,ISO 646没有为每个字符提供单一定义。它表示7位ASCII字符,并且字符集中存在使用特定于区域的变体定义的特定范围。有关更多信息,请参阅

因此,可能没有具体的方法来处理这个问题,以便它在任何地区都能正常工作。我不熟悉卡的标准,但我想知道卡的数据中是否有特定的字节告诉您应用哪种变体。换句话说,您是否可以阅读一些信息来告诉您是否应用英语、德语、丹麦语或其他变体

一旦您知道应用哪种变体,您最好的选择可能是寻找支持将此数据转换为ISO 8859-1的C库。获得ISO-8859-1(或类似)格式的数据后,可以使用kCFStringEncodingISOLatin1将其转换为NSString


我不确定iOS上是否有ISO-646到ISO-8859-1转换库。我见过的最常见的C库是GNU库,但我不认为在iOS上支持您的案例有具体的转换。如果归结到这一点,使用上面显示的转换表手动转换字节应该不会太难。正如您所看到的,对于任何给定的变量,只需要转换少量字符。

如何显示NSData对象?当前在控制台中使用NSLog和UITextField。因此,我应该将NSData对象转换为字节数组?我应该使用哪种编码?更好的编码[[NSString alloc]initWithData:nsdata encoding:使用以下选项之一:kCFStringEncodingMacRoman kCFStringEncodingWindowsLatin1 KCFStringencodingSolatin1 kCFStringEncodingNextStepLatin kCFStringEncodingASCII kCFStringEncodingUnicode KCFStringencodingUnlossyScii KCFStringencodingUt8 KCFStringencodingNonsyScii,不确定哪一个可以帮助您。我已经尝试了相同的结果。在UTF8 d中ecimal 92也在评估退格。