2

目前我有一个正在扫描 SQL Server 表并正在读取包含文本的列的 powershell 进程。目前,我们的字符位于扩展的 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(这是来自 word 的长破折号)。

4

1 回答 1

1

在 SQL Server 中,

select UNICODE('–')

将返回 8211。

我不认为 PowerShell 支持 ANSI,除了 I/O;它在内部使用 Unicode。

于 2012-06-19T23:26:05.930 回答