Umlaute bei MPLABX

OP #2398015
Lesenswert?

mit C18 unter MPLAB X findet der compiler, dass 'ä', 'ö' und 'ü' den 
selben wert hat (siehe screenshot), unter MPLAB 8.x ging das ohne 
probleme. beim projekt kann man das encoding format (standardmässig 
UTF-8) umstellen, aber das bringt auch nix. kennt jemand den work 
arround?
Angehängte Dateien:
#2398019
Lesenswert?

Für die Umlaute wird einfach mal gern mit "Escape-Buchstabe zum schalten 
auf andere Tabelle + zwieter Buchstabe zum Zeichen aus dieser Tabelle 
auswählen" gearbeitet. Und je nach Standard anders umständlich.

Deswegen "sieht" der Compiler immer nur das Escape-Zeichen oder die 
Escape-Sequenz und meint das Teil wär schon mal da gewesen.
mfg mf
Gast #2398030
Lesenswert?

switch(x) {
   case 132: // ä
   ...
   case 148: // ö
   ...
   case 129: // ü
   ...
   case '°': ...

}

Der Compiler macht aus '<Zeichen>' nichts anderes als dieses ins 
Zahlenformat zu überführen. In einem (unsigned)char kannst du 256 
verschiedene Werte (Zeichen) ablegen.

Wenn du wissen willst welcher Zahlenwert hinter welchem zeichen steckt, 
kannst du zum Beispiel so etwas machen.

#include <stdio.h>

int main() {
    int i;
    for(i = 0; i < 256; ++i)
        printf("%i - %c\n", i, i);

    return 0;
}
#2398148
Lesenswert?

Master Snowman schrieb:
> mit C18 unter MPLAB X findet der compiler, dass 'ä', 'ö' und 'ü' den
> selben wert hat (siehe screenshot), unter MPLAB 8.x ging das ohne
> probleme. beim projekt kann man das encoding format (standardmässig
> UTF-8) umstellen, aber das bringt auch nix. kennt jemand den work
> arround?

Zur Info: chars sind normalerweise signed, die Umlaute haben also 
negative Charcodes. switch() hat jedoch ein unsigned char als Argument, 
d.h. alle case-Werte werden in unsigned char gewandelt. Bei negativen 
Werten ist das ein Problem.

fchk
OP #2398421
Lesenswert?

@Hermann U.: ja, das war's. es gibt zwar nur "Windows-1250" zur auswahl, 
aber es hat geholfen. für alle, die das gleiche problem haben oder jene, 
die diesen thread später finden:

1. Project -> Properties -> General -> Encoding -> Windows-1250
2. entsprechendes dokument, das probleme macht, ein zeichen ändern
   (z.b. leerschlag irgendwo hinzufügen) und neu abspeichern
3. kompilieren
ps: ohne schritt 2, geht's nicht

vielen dank an alle! :-)
Gast #6134112
Lesenswert?

Hermann U. schrieb:
> Text editor, unter National Language Code Page auf 1250 ANSI - Central
> Europe) einstellen. Vielleicht hilft das.

Master S. schrieb:
> 1. Project -> Properties -> General -> Encoding -> Windows-1250
> 2. entsprechendes dokument, das probleme macht, ein zeichen ändern
>    (z.b. leerschlag irgendwo hinzufügen) und neu abspeichern
> 3. kompilieren
> ps: ohne schritt 2, geht's nicht


Bei mir geht es nicht, was mache ich falsch?
hat es vielleicht mit Windows Region und Sprachen was zu tun?

Sieht immer noch so aus: "zurück"
Gast #6135081
Lesenswert?

Nach dem Umstellen der Codierung musst Du jetzt noch alle Umlaute 
korrigieren.

Vermutlich verwendet der Editor eine Form von UTF-8, in dem ein ü als 
zwei Bytes in der Datei stehen. Dabei ist das erste Byte für ä, ö und ü 
gleich.

Es gibt sogar einen Code in Unicode für stelle das folgende Zeichen als 
Umlaut (mit 2 Punkten drüber dar). Da könntest Du aber ein zweites u in 
zurück erkennen.

Bestimmt gibt es auch Programme, die die Codierung einer Textdatei 
umwandeln können. Die Codierung im Editor musst Du aber auf alle fälle 
auch ändern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren