【问题标题】:Powershell converting a character to ASCIIPowershell将字符转换为ASCII
【发布时间】:2012-06-19 22:41:27
【问题描述】:

目前我有一个 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(这是来自 word 的长破折号)。

【问题讨论】:

    标签: sql-server-2008 powershell extended-ascii


    【解决方案1】:

    在 SQL Server 中,

    select UNICODE('–')
    

    将返回 8211。

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

    【讨论】:

    • 啊,可惜它是这样工作的,但现在 SQL Server 和 Powershell 之间的一切都匹配了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2023-03-24
    • 2018-01-16
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多