【发布时间】:2013-11-17 14:31:26
【问题描述】:
我正在尝试使用 ascii 编码从目标 c 中的 NSString 获取字节数组。我需要这个数组来计算该字符串的 SHA256 哈希,然后将结果与 Windows 中生成的 SHA256 编码进行比较。
NSString *myString = @"123456¥";
const char *string = (const unsigned char *) [myString cStringUsingEncoding:NSASCIIStringEncodin];
这总是给出nil,因为它包含¥ 字符。
问题是我不能使用 UTF8Encoding,因为 windows 生成的哈希使用 ASCII 编码,如下所示:
string text ="123456¥";
byte[] arrSHA = System.Text.Encoding.ASCII.GetBytes(text);
虽然在目标 c 中使用 UTF8 编码确实有效,但我不能使用它,因为它会提供与 .Net 中生成的字节数组不同的字节数组,这将导致该字符串的 SHA 完全不同。
关于如何进行这项工作的任何建议?
阅读有关ASCII encoding in .Net 的文档似乎它将每个非ASCII 字符转换为?。我可以在目标c中检测到这些字符并手动将它们替换为?
问候
【问题讨论】:
-
您的字符串不是 ASCII,请找出 Windows 中使用的确切编码。也许是UTF16。也可以试试
NSMacOSRomanStringEncoding,它处理完整的 256 个字符。 -
我知道它不是 ASCII,这就是它让我痛苦的原因。然而,在 Windows 中使用 ASCII 编码将其转换为字节是可行的,所以我想知道是否有人知道如果字符串不是 ASCII,.net 是否以某种方式默认为不同的编码
-
那么,问题是 Windows 正在对非 ASCII 字符串进行 ASCII 转换?修复 Windows 端以使用可以正确处理非 ASCII 字符串的编码。在 Windows 上打印转换后的数据,以了解 Windows 实际在做什么。在您的问题中发布。
-
问题是我无法修复 Windows 端,损坏已经造成,所有哈希值都以 ASCII 编码保存在服务器上。
-
至于
allowLossyConversion很遗憾它不起作用,它将 UTF8 字符转换为最近的 ASCII 字符。例如 ¥ 转换为 Y。如果您阅读我的更新,我想我需要将字符串中的任何 UTF8 字符转换为?
标签: c# objective-c encoding utf-8 sha