Arhn - архитектура программирования

Не удается подобрать кодировку файла при записи файла с помощью API файловой системы Chrome

Я пытаюсь написать файл, используя TextEncoder и TextDecoder. Мне также нужно суммировать 65 в таблицу ascii и не суммировать, когда я имею дело с разрывом строки. Я адаптировал предложенное решение здесь прочитать файл с файловым API. Однако я сталкиваюсь с некоторыми проблемами при работе с кодировкой.

// 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);

Когда я пытаюсь прочитать сгенерированный контент, я получаю следующее:

    // 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
*/

Почему этот элемент 129 появляется, когда я читаю fileContent, если он не появляется, когда я строю строку?


Ответы:


1

Этот элемент 129 происходит от buf.map((byte)=>byte-65).
Насколько я понимаю эту нотацию, она вычитает число 65 из каждого байта в buf.

Это может хорошо работать для // fileContent = "qrstu\n", но не будет работать должным образом, если fileContent содержит символы, отличные от ASCII (более 7 бит), например, для // fileContent = "q½rstu\n", потому что ½ Vulgar Fraction One Half, кодовая точка U+00BD, является UTF- 8 закодировано как последовательность байтов 0xC2, 0xBD.

А элементарная cmd арифметика set /a 0xc2 - 65 дает результат 129.

Кстати, я думаю, что buf.map((byte)=>byte-65) может вызвать ошибку, если значение ASCII символа в fileContent меньше, чем 65, предполагая, что byte является беззнаковым типом данных value.

21.06.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..