2016-06-20 5 views
0

TextEncoderTextDecoderを使用してファイルを書き込もうとしています。私はまた、ASCIIのテーブルに65を合計する必要があり、私が改行を処理するときに合計しないでください。私は提案された解決策hereをファイルAPIでファイルを読むために適応させました。しかし、私はエンコーディングを扱う際にいくつかの問題に直面しています。ChromeファイルシステムAPIを使用してファイルを書き込むときにファイルエンコードに適合しない

// Now we read the generated file content with: 
    // fileContent = "q½rstu\n" 
     var buf= new Uint8Array(fileContent); 
     buf=buf.map((byte)=>byte-65); 
     var fileAsString= new TextDecoder("ascii").decode(buf); 

/* 
output bellow is given by console.log(fileAsString[i], fileAsString.charCodeAt(i)); 

0 48 
129 -> Why this guy appers? 
| 124 
1 49 
2 50 
3 51 
4 52 
*/ 

たときにそれが表示されていない場合、私は含むFileContentを読んだとき、この129要素が表示されます理由:私は、コンテンツが生成された読みしようとすると、私は次の取得

// write cames from fileEntry.createWriter 
 

 
var result='0'+String.fromCharCode(124)+'1234'+String.fromCharCode(10); // 0|1234 
 

 
var asciiArray=[]; 
 
var stringArray=[]; 
 
var fileContent=''; 
 
var tpmBuffer; 
 
var uint8array=new TextEncoder().encode(result); // returns a Uint8Array containing the text given in parameters encoded 
 
uint8array=uint8array.map((byte)=>byte+65); // shift :) 
 

 
for(var i=0;i<uint8array.length;i++) { 
 
    if(uint8array[i]!==75) { 
 
     asciiArray.push(uint8array[i]); 
 
    } else { 
 
     // I cant shift line break! 
 
     asciiArray.push(10); 
 

 
     tpmBuffer= new TextEncoder().encode(String.fromCharCode.apply(null,asciiArray)); 
 
     stringArray.push(new TextDecoder("utf-8").decode(tpmBuffer)); 
 
     console.log(stringArray); //["q½rstu\n"] 
 
     asciiArray=[]; 
 
    } 
 
} 
 

 
var encodedBlob= new Blob(stringArray, { 
 
    encoding:'UTF-8', 
 
    type: 'text/plain;charset=UTF-8' 
 
}); 
 

 
// writer.write(encodedBlob);

私は文字列を構築する?

答えて

0

その129要素はbuf.map((byte)=>byte-65)です。
この表記を理解できれば、バイトからbufの数字65を差し引きます。

それは// fileContent = "qrstu\n"のために働く可能性がありますが、予想通りfileContentは、非ASCII文字(以上7ビット)が含まれている場合機能しません、// fileContent = "q½rstu\n"用など 常分数半分、コードポイントU+00BDは、UTF-8であるため、バイトシーケンスとしてエンコードされます0xC2,0xBD

そして基本cmd算術set /a 0xc2 - 65は結果129を与える。

はところで、私はfileContent内の文字のASCII値がbyteが符号なしデータ型であること65未満想定されている場合buf.map((byte)=>byte-65)はエラーを発生させる可能性があると思います。

関連する問題