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 で拡張されているため、結果がブラウザからのコピーと同じになるかどうかはわかりません。

パワーシェルで

[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; したがって、私の質問は、ほとんどの値で機能しますが、ASCII 値 150 では機能しないため、powershell で ASCII 値を検索する上記の正しい方法です (これは単語からの長いダッシュです)。

4

1 に答える 1

1

SQL サーバーでは、

select UNICODE('–')

8211 を返します。

I/O を除いて、PowerShell は ANSI をサポートしていないと思います。内部では Unicode で動作します。

于 2012-06-19T23:26:05.930 に答える