2017-06-08 11 views
-2

Encoding.Default.GetString(image)を使用してmachine.photosに格納された文字列に変換しようとしているimageAsBytesというバイト配列形式で呼び出されています。変換が間違っていると私はいくつかの奇妙な出力を取得しています。それは、正しく変換されていないのはなぜC#奇妙なEncoding.Default.GetString出力をカメラの文字列に変換する

System.Text.Encoding.Default.GetString(image);この enter image description here

を返していますか?ここで私はあなたのコメントに基づいて

var file = await CrossMedia.Current.TakePhotoAsync(
      new StoreCameraMediaOptions 
      { 
       SaveToAlbum = true, 
      }); 

using (var memoryStream = new MemoryStream()) 
      { 
       file.GetStream().CopyTo(memoryStream); 
       //file.Dispose(); 
       imageAsBytes = memoryStream.ToArray(); 
       file.Dispose(); 
      } 
+0

なぜ正しくないのですか?あなたの希望する出力は何ですか?あなたはデフォルトの代わりに他のエンコーディングを試しましたか? – Andrew

+0

こんにちはアンドリューは、正しい出力は次のようなものになるだろう。この 'iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAMSURBVBhXY0ACDAwAAA4AAXqxuTAAAAAASUVORK5CYII ='これまでのところ、これは私が試しただけのエンコードですが、興味深いことに、それは以前に –

+0

を働いていた私はC#のEncoding.UTF8でそれを試してみましたが、私は同じことを見ています問題 –

答えて

2

に画像を作成するために使用しているコードは、私はあなたがベース64文字列のエンコーディングをしたいと思いますされています。

string encoding = Convert.ToBase64String(image); 

この形式は、バイナリデータを読み込み可能な文字列に変換するのに便利です。ただし、ベース256の代わりにベース64のシステムを使用している場合は、それを多く占有します(バイト!)。これにより、データサイズが約33%増加します。 MSDNによる

ベース64ゼロから昇順に数字大文字 文字「」から「Z」、小文字「」から「z」は、あります の数字「0」〜「9」、記号「+」、「/」である。無価値の 文字 "="は、末尾のパディングに使用されます。

たとえば、iVBORw0KGgoA(サンプルの最初の12文字)は9バイトを表します。 Encodingメソッドのいずれかを使用すると、対応するエンコーディングに変換されます。これは、1バイト(ASCIIまたはUTF8)、2バイト(Unicode)または4バイト(UTF32)ごとに1文字になります。これは、2バイトまたは4バイトのバイトが1つの中国語のシンボルとして終わる可能性があることを意味します。これは明らかにあなたが望むものではありません。

関連する問題