2012-06-19 181 views
2

目前我有一個正在掃描SQL Server表並正在讀取包含文本的列的PowerShell程序。目前,我們有擴展的ASCII域中的字符會導致我們的下游進程中斷。我原先在SQL Server中識別這些差異,但在解析文本時很糟糕,所以我決定編寫一個powershell腳本來完成組合正則表達式的操作。我會發布代碼,以幫助其他失去的靈魂尋找這樣的正則表達式。將字符轉換爲ASCII的Powershell

$x = [regex]::Escape("\``[email protected]#$%^&*()_|{}=+:;`"'<,>.?/-") 
$y = "([^A-z0-9 \0x005D\0x005B\t\n"+$x+"])" 
$a = [regex]::match($($Row[1]), $y) 

問題是當我想要顯示一些ASCII值回在一封電子郵件中說,我在清理數據。這些數字與SQL Server不一樣。警告我不確定您的結果是否與您的瀏覽器相同,因爲這些擴展名爲ascii。

在PowerShell中

[int]"–"[-0]; #result 8211 that appears to be wrong 
[int]" "[-0]; #result 160 this appears to be right 

在SQL Server

select ASCII('–') --result 150 
select ASCII(' ') --result 160 

什麼在PowerShell中會幫助你得到同樣的結果在ASCII的SQL Server查詢,如果有的話。

TLDR;所以我的問題是,以上是在powershell中查找ASCII值的正確方法,因爲它適用於大多數值,但不適用於ASCII值150(這是來自單詞的長破折號)。

回答

1

在SQL Server中,

select UNICODE('–') 

將返回8211

我不認爲PowerShell支持ANSI,除了I/O;它在內部使用Unicode。

+0

啊,這是一個恥辱,它的工作原理是這樣的,但現在一切都在SQL Server和Powershell之間進行匹配。 – JStead