WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

MatLab und Encoding - Ein Durcheinander?

 

MasterQ
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.02.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2022, 16:20     Titel: MatLab und Encoding - Ein Durcheinander?
  Antworten mit Zitat      
Moin, ich habe mich gerade im Forum registriert. Somit ein Hallo in die Runde.

Ich krampfe gerade mit dem Encoding von MatLab. Mir scheint es hier nicht gerade aus zu gehen und bin verwirrt.

In der Documentation https://de.mathworks.com/help/matla.....ode-and-ascii-values.html steht, dass intern mit UTF-16 kodiert wird.

Der Editor steht auf UTF-8

und mit Feature('DeclareDefaultCharacterSet') kommt windows-1252

Ja was denn nun?

Ich muss ASCII-Dateien unterschiedlicher Kodierung einlesen die auch noch Umlaute enthalten.

Leider geht es im Datenarchiv ebenfalls durcheinander, so dass ich nicht von einer festen Kodierung der Dateien ausgehen kann.

Hat da jemand einen Tipp, wie das geregelt werden sollte?

Gruß

MQ
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.02.2022, 16:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Der Editor steht auf UTF-8

Woraus schließt du das?

Zitat:
Ich muss ASCII-Dateien unterschiedlicher Kodierung einlesen

Wie bzw. mit welchen Befehlen willst du die Dateien einlesen?
Bei detectImportOptions (was die Optionen für readtable, readmatrix etc. erzeugt) kannst du z.B. das Encoding angeben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterQ
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.02.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2022, 11:53     Titel:
  Antworten mit Zitat      
Moin Harald,

Ich glaube das irgendwo gelesen zu haben, dass der Editor in UTF-8 kodiert, finde es aber nicht mehr. Wenn man im Editor ein neues File mit Umlauten erzeugt und abspeichert, dann zeigt mir notepad++ eine Kodierung von UTF-8 an.

Ich mache das im Moment so:

Code:

    FID = fopen(fpath,'r');  
    FileBytes = fread(FID,inf,'char');
    FileStr = native2unicode(FileBytes', 'windows-1252');
    fclose(FID);
 


Mich wundert dabei aber, dass fread double zurück gibt, obwohl ich als PRECISION char angebe. Auch uchar hilft da nicht. Aber immerhin macht native2unicode anscheinend alles richtig.

MQ
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.02.2022, 17:39     Titel:
  Antworten mit Zitat      
Hallo,

fread würde ich wirklich nur für Binärdateien verwenden. Ansonsten gibt es eigentlich immer schönere Möglichkeiten.

In der Doku von fread steht:
Zitat:
The MATLAB®char type is not a fixed size, and the number of bytes depends on the encoding scheme associated with the file. Set encoding with fopen.

Dem würde ich auch folgen, d.h. bei dir:
Code:
FID = fopen(fpath,'r', 'n', 'windows-1252');


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterQ
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.02.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2022, 13:12     Titel:
  Antworten mit Zitat      
Ich kann nicht immer vorher sagen wie eine Datei kodiert ist. Von daher muss ich vorher testen können, ob nun windows-1252 oder UTF-8 vorliegt.

Die Function detectImportOptions() tut nicht, weil ich keine MatLab-Dateien einlese sondern Dateien von anderen Anwendungen.

Mittlerweile ist mir aber klar, dass MatLab (Windows) intern mit windows-1252 kodiert. Das steht dann im Wiederspruch zu der Aussage in der Documentation. Oder gilt die Docu nur für Linux-Versionen?

Mein Lösung lautet nun:

Code:

FID=fopen(datei,'r');
FileBytes=fread(FID, inf, 'uint8');
if isempty(find(FileBytes==195)
  FileStr=char(FileBytes);
else
  FileStr = native2unicode(FileBytes,'utf-8');
end
 


Byte 0xC3 oder dezimal 195 ist die Kennung für UTF-8 Zeichen. Wenn vorhanden, dann ist die Datei höchstwahrscheinlich UTF-8. Bei unseren selbsterstellten Dateien bin ich mir da sicher, denn das mit windows-1252 kodierte char(195) ergibt ein A mit Tilde auf dem Kopf. Das kommt bei uns nicht vor!

MQ
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.433
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.02.2022, 17:14     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die Function detectImportOptions() tut nicht, weil ich keine MatLab-Dateien einlese sondern Dateien von anderen Anwendungen.

detectImportOptions ist auch für tabellarisch aufgebaute Text- oder Excel-Dateien geeignet, aber eben nicht für Binärformate.

Zitat:
Oder gilt die Docu nur für Linux-Versionen?

Das sollte wenn explizit vermerkt sein.

Zitat:
Das steht dann im Wiederspruch zu der Aussage in der Documentation.

Das wäre dann ein Hinweis für den Technischen Support von MathWorks.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.