2012-02-16 20 views
0

私は、次の方法使用して文字列にJavaScriptでのByteArrayを変換する場合:JavascriptをC#のUnicode文字列 - headscratcher

convertByteArrayToString: function(byteArray) 
{ 
    var s = ''; 
    for(var i = 0;i < byteArray.length;i++) 
      { 
        s += String.fromCharCode(byteArray[i]) 
      } 
    return s; 
}, 

がどのように私は、C#でバイト配列に戻って、この文字列を変換しますか?

Iは、次の3つすべてを試みた:

System.Text.UnicodeEncoding encoding = new System.Text.UnicodeEncoding().GetBytes(myString); 
System.Text.UTF32Encoding encoding = new System.Text.UTF32Encoding().GetBytes(myString); 
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding().GetBytes(myString); 

最も近い最初のものであるが、それは、アレイ内の他のすべての要素が0であると、二重元の長さであり、バイト配列を返します時には誤った値または2つを含むことがあります。

私が知っている限り、String.fromCharCodeはUnicodeで動作するので、これをC#とどのように相互運用できるのでしょうか?

これは私をナットにしています!

編集: [139、104、166、35、8、42、216、160、235、153、23、143、105:ここ

は、

オリジナルバイト配列の例であります、3、24、255]

My機能は、これを変換します:C#では "h|#1 *のØのëiÿ"

を、バイト配列に、この文字列をデコードしようとすると、以下の結果が得られます。

System.Text.UnicodeEncodingを使用すると、 [142,0,139,0,104,0,166,0,35,0,8,0,42,0,216,0,32,0,235,0,153,0,23,0,143,0,105、 0,30,24,0,255,0]

+1

それはないです」base64エンコーディングを介して行われます長さの2倍 "です。 C#の文字列はリトルエンディアンのUTF16なので、30文字の文字列は60バイトです。最も一般的な英数字の文字は0xFF未満であり、2番目の(より重要な)バイトは0です。 –

+0

エンコードは暗号化ではありません。 Unicode文字ポイントは、文字エンコードすることができます。 UTF-8またはUTF-16を使用します。エンコーディングは、データを符号化する方法である(バイトは通常暗示される)。ベース64または16進数。暗号化は機密性を作成する方法です。 AES。 –

答えて

2

crypto-jsCrypto.charenc.UTF8.stringToBytes()Crypto.charenc.UTF8.bytesToString()であり、C#ではUTF-8エンコーディングで完全に消えています。それが判明した議論の後、OPは、C#にJSからbyte[]を輸送したい

編集

- これは、より良い(私は同じJSツールキットをお勧め)

+0

ちょうどそれを試して、上記の私の関数と同じ結果を与えた。 –

+2

あなたのバイト配列が有効なUTF8文字列ではないことを意味します。たぶん疑問は別に尋ねるべきです:JSからC#に 'byte []'を移したいのですか?これがそうであれば、文字列を経由せず、base64(crypto-jsも)経由で行ってください。暗号化されたパスワードのために常にこれを行いますので、それはうまく動作します.-) –

+0

"文字列を経由しないvia base64(crypto-jsも) " - 治療を受けました、ありがとうございました –

関連する問題