目前我有一个PowerShell进程正在扫描SQL Server表并正在读取包含文本的列。目前,我们在扩展的ASCII域中具有导致我们的下游进程中断的字符。我在SQL Server中识别这些差异,但在文本解析方面很糟糕所以我决定编写一个PowerShell脚本来组合正则表达式。我将发布代码,以帮助其他失去灵魂寻找这样的正则表达式。
$x = [regex]::Escape("\``~!@#$%^&*()_|{}=+:;`"'<,>.?/-")
$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(这是来自单词的长划线)。
答案 0 :(得分:1)
在SQL Server中,
select UNICODE('–')
将返回8211。
我不认为PowerShell支持ANSI,I / O除外;它在内部使用Unicode。