Чтение русских символов с SD карты

Тема в разделе "Arduino & Shields", создана пользователем RaZZvedos, 4 окт 2018.

Метки:
  1. RaZZvedos

    RaZZvedos Нуб

    Снимок.JPG Тестовое слово, на котором пытаюсь добиться работы всего остального
     
  2. b707

    b707 Гуру

    RaZZvedos - покажите код, который это печатает.
     
    RaZZvedos нравится это.
  3. RaZZvedos

    RaZZvedos Нуб

    Код (C++):
      File namesFile = SD.open("names.txt", FILE_READ);
      if (namesFile) {
        // Считываем названия жгутов из файла в массив
        int x = 0, y = 0;
        while (namesFile.available()) { //пока есть байт для чтения
         char c = namesFile.read();     //считываем символ
         if(c == ';'){                 //если символ ; переходим на следующую строку
          y++;
          x=0;
          namesFile.seek(namesFile.position()+2);   //пропускаем символ переноса
          Serial.println();
         }
         else{                          //если нет, пишем в массив
          fileText[x][y] = c;
          Serial.print(fileText[x][y]);
          x++;
         }
        }
      }
      namesFile.close();
     
  4. Watashi

    Watashi Гуру

    Недавно столкнулся с похожей проблемой и решил ее следующим образом:
    1 исходный текст подготовил в notepad++, кодировка UTF8 без BOM
    2 при чтении из файла байтов их переводил в строковый формат, т.е. прочитывал строку и только потом ее расшифровывал в соответствии со своим форматом
    пример фрагмента кода
    Код (C++):
      if (dataFile) {      // if the file is available, write to it:
        txtMsg = "";
        while (dataFile.available()) {
          inChar = dataFile.read();
       
          if (inChar != 012) txtMsg += inChar;
            else {
           
              txtMsg += "\0";      
              Serial.print("- ");  Serial.print(txtMsg.length()); Serial.print("= ");  Serial.println(txtMsg);
         
              inString = "";
              inString += txtMsg.substring(0,2);        // Serial.print("-");    Serial.println(inString);
              if (inString == "*M") {
     
    нужно помнить что русские символы занимают два байта, поэтому лучше работать со строковыми данными
    удачи ))
     
    RaZZvedos нравится это.
  5. RaZZvedos

    RaZZvedos Нуб

    АААААААГромнейшее спасибо! Именно то, что было нужно!=)