【发布时间】:2010-11-20 22:28:22
【问题描述】:
我有一个为 MD5 munge 准备消息的 java 代码
private static char[] jimsCopyRight = {
'C'、'o'、'p'、'y'、'r'、'i'、'g'、'h'、 't', ':', '', 0xa9, ''};
在
中使用StringBuffer message = new StringBuffer();
message.append(name.toLowerCase()); message.append(new String(jimsCopyRight));
当我使用
打印出消息时for(int i = 0; i < message.length(); i++){
System.out.println(" i = " + i + " char " + message.substring(i, i + 1) + " charAT " + message.charAt(i)); }
我得到 i = 14 char \251 charAT \251 并且 message.toString 是 jimCopyright: \251
我需要构造一个具有相同字符的 NSMutableString。
在我尝试过的事情中
wDevCopyright = [NSString stringWithFormat:@"jimCopyright: %c ", 0xa9];
for(int i = 0; i < [message length]; i++){
NSLog(@"i = %d char %c %d", i, [message characterAtIndex:i], [message characterAtIndex:i]);
}
这给了我 i = 14 char © 169
任何有助于使 NSMutableString 与 StringBuffer 相同的帮助将不胜感激。
问题是,当我在 MD5 中混合两个字符串时,当我添加 0xa9 时会得到不同的结果。打印只是为了查看字符串。
我认为这与 Java 中的 char[] 和 NSMutableString 的构造有关。我不相信它们是相同的价值观。
我有一些 C 代码,它声明版权为
#define jimsCopyRight "Copyright: � "
版权的Java MD5和C MD5是一样的。
【问题讨论】:
-
0xa9 是 169,unicode char 169 是 (c) 符号,所以问题真的是,为什么 java 案例认为它的 char 251?
-
在您的 java 情况下,您的输出流似乎不是 unicode,并且您正在查看输出流本身,如果您更改循环,您会看到一些不同的编码结果到
-
ystem.out.println(" i = " + i + " char " + message.substring(i, i + 1) + " charAT " + Integer.valueOf(message.charAt(i) ));您会看到 char 仍然是代码点 169 ( i = 11 char © charAT 169)
-
@superfell: \251 是一个八进制转义序列。看我的回答。
标签: cocoa ascii nsmutablestring stringwithformat