2016-11-13 3 views
-2

Ok - 私はPerl Guruの助けが必要です。同僚は、サポートしているPerlアプリケーションのコードと、Oracleにデータを書き込む前に値をエンコードする方法を教えてくれました。なぜ彼らがこのエンコーディングをしたのか(特殊文字のように見える)私に聞かないでください。値はOracleのCLOBに書き込まれます。 SQL ServerのSSISパッケージで使用するためには、同等のデコードが必要です。PerlスクリプトをT-SQLに翻訳する

基本的に、SSISパッケージを使用してOracleデータベースからデータを読み取り、値をデコードする必要があります。単語間の "+"記号は、置換ステートメントで簡単です(これが最善の方法ではないが、これまでのところうまくいくようです)。

私のPerlスクリプトのスキルが限られているので、これは私のスキルセットを超えています(私はいくつかの読書をしましたが、私はPerlをよく知らないので思ったほど簡単ではありませんでした)。私はエンコーディングではない文字列のデコードに興味があります。

このヒントとして、私は%29が ")"と等しいことを知っています。正規表現を使っているように見えますが、私はそれを使うのに熟練していません。

sub decodeValue($) 
    { 
     my $varRef = shift; 

     ${$varRef} =~ tr/+/ /; 
     ${$varRef} =~ s/%([a-fA-F0-9]{2})/pack("C",hex($1))/eg; 
     ${$varRef} =~ tr/\cM//; 
     ${$varRef} =~ s/"/\"/g; 
     return; 
    } 


sub encodeValue($) 
    { 
     my $varRef = shift; 

     # ${$varRef} =~ tr/ /+/; 
     ${$varRef} =~ s/"/\"/g; 
     ${$varRef} =~ s/'/\'/g; 
     ${$varRef} =~ s/(\W)/sprintf("%%%x", ord($1))/eg; 
     return; 
    } 
+0

あまりにも多くの情報を、現在のコード、現在の出力/エラーmsg、混乱している箇所に関するコメントなどがあります。がんばろう。 – shellter

+0

あなたの記事の一番下にあるタグをメモしてください。質問を作成するときに設定します(また、サイトには「推測」があり、見た目に時間がかからない場合は無関係です)。あなたは私が先に進んで削除する「オラクル」を持っていますが、それは質問を投稿するときのあなたの仕事です! – mathguy

答えて

2

encodeValueサブルーチンは、それに相当するHTMLエンティティに単一引用符と二重引用符を変換するための追加のステップで、簡単なURLエンコードアルゴリズムです。これらのステップを逆の順序でデコードするには、Transact-SQLコードを記述する必要があります。まず、すべての%7fタイプのシーケンスを同等の文字に置き換えることです。

コードはURL Decode in T-SQLです。完全なUTF-8文字セットをサポートしています。あなたが希望する場合のみ、7ビットASCIIをサポートするために、すべてのELSE IF @Byte1Valueのブロックを削除することができ、それは、単一および二重引用符やスペースの

残りの変換がREPLACE呼び出しを使用して元に戻すことができるスタンドとしてそれはあなたのために正常に動作します、私はあなたが助けを必要としないと信じています。元のdecodeValueサブルーチンは二重引用符とスペースのみを復元し、一重引用符は'と表示されるので、その動作を複製するかどうかわかりません

関連する問題