Swift中特殊字符的处理
我正在用Swift开发一个Cocoa应用程序,但我一直在尝试做一些必须容易做的事情,但不知何故,我没有得到我期望的结果 在我的应用程序中,我试图将一个单词散列到MD5。当我跳过特殊角色时,一切正常。当我尝试对具有特殊字符的单词进行散列时,结果散列与正确的散列不对应 这是我的密码Swift中特殊字符的处理,swift,cocoa,hash,character,Swift,Cocoa,Hash,Character,我正在用Swift开发一个Cocoa应用程序,但我一直在尝试做一些必须容易做的事情,但不知何故,我没有得到我期望的结果 在我的应用程序中,我试图将一个单词散列到MD5。当我跳过特殊角色时,一切正常。当我尝试对具有特殊字符的单词进行散列时,结果散列与正确的散列不对应 这是我的密码 import Cocoa let task = NSTask() let pipe = NSPipe() task.standardOutput = pipe task.launchPath = "/bin/bash
import Cocoa
let task = NSTask()
let pipe = NSPipe()
task.standardOutput = pipe
task.launchPath = "/bin/bash"
task.arguments = ["-c", "echo -n 'Canción' | md5"]
let file:NSFileHandle = pipe.fileHandleForReading
task.launch()
task.waitUntilExit()
let data = file.readDataToEndOfFile()
let datastring = NSString(data: data, encoding: NSUTF8StringEncoding) as String!
print("Hash = \(datastring)")
如果在操场上运行此代码,将得到以下哈希值:
Hash = 770f92a03e9c82af426549941a9df70b
但是,如果您直接在OSX终端中运行下一个命令,您将得到正确的哈希值,这与第一个完全不同
$ echo -n 'Canción' | md5
这是终端响应:
3abf536a5262c902a30d74f68f38067b
很明显,我遗漏了一些重要的内容,但我找不到代码中的内容
有人吗
请。。。救命啊!这里有一个线索:
就是问题所在。如果删除该字符,则两个位置的结果相同。可能需要对字符编码进行一些设置。如果将md5
更改为Od-x
,您可以看到交付给Od
和md5
的十六进制代码,它们是不同的。这很有趣。显然,NSTask
传递“分解映射”中的所有参数字符串,即“ó”作为“o”+“')这似乎是NSTask中的一个“bug”,这里也观察到:。这里也观察到:,。这是正确的@vacawama问题在于字符。我需要阅读更多关于Od
命令行的信息。对我来说,使用八进制是不常见的。这里有一个线索:就是问题所在。如果删除该字符,则两个位置的结果相同。可能需要对字符编码进行一些设置。如果将md5
更改为Od-x
,您可以看到交付给Od
和md5
的十六进制代码,它们是不同的。这很有趣。显然,NSTask
传递“分解映射”中的所有参数字符串,即“ó”作为“o”+“')这似乎是NSTask中的一个“bug”,这里也观察到:。这里也观察到:,。这是正确的@vacawama问题在于字符。我需要阅读更多关于Od
命令行的信息。对我来说,使用八进制是不常见的。