Forum: PC-Programmierung stringlaenge nach Wandlung von utf-8 nach iso-gedoens


von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wenn ich in C mittels der Funktion iconv() Strings von UTF-8 nach 
irgendeinem ollen ISO-8859-X wandeln will, kann ich dann davon ausgehen, 
dass der ISO String keinesfalls laenger als der UTF-8 String ist - oder 
kennt da wer gleich ein Gegenbeispiel?

Gruss
WK

von foobar (Gast)


Lesenswert?

Solange du kein //TRANSLIT benutzt, sollte die Annahme passen.

von leo (Gast)


Lesenswert?

Dergute W. schrieb:
> kann ich dann davon ausgehen,
> dass der ISO String keinesfalls laenger als der UTF-8 String ist

Ja, passt so.
leo

von Dergute W. (derguteweka)


Lesenswert?

foobar schrieb:
> Solange du kein //TRANSLIT benutzt, sollte die Annahme passen.

Wassndasfuernapparat?

Gruss
WK

von test (Gast)


Lesenswert?

Du musst dir erstmal darüber Gedanken machen das es in deinen utf-8 
String Zeichen geben kann, die es in deiner iso Codierung nicht gibt.

Ferner gibt es alternative Zeichenversionen. Wird in deinem utf-8 String 
z.B. ein Minus mit dem Zeichen für Minus dargestellt, dann hast du ein 
Problem. In den iso Codierungen gibt es kein Zeichen für Minus. Es gibt 
nur ein Zeichen welches als Bindestrich und Minus gemeinsam genutzt 
wird. Das ist aber ein komplett anderes Zeichen.


Du solltest dich erstmal grundsätzlich mit Unicode beschäftigen. Sonnst 
tappst du da zwangsläufig früher oder später in Fallen

von Dergute W. (derguteweka)


Lesenswert?

Moin,

test schrieb:
> Du musst dir erstmal darüber Gedanken machen das es in deinen utf-8
> String Zeichen geben kann, die es in deiner iso Codierung nicht gibt.

Nein, das muss ich nicht. Wenn da Zeichen drinnen sind, die's nicht in 
meinem ISO gibt, dann wird iconv() hoffentlich -1 zurueckgeben und errno 
auf EILSEQ oder EINVAL oder sowas setzen.

test schrieb:
> Ferner gibt es alternative Zeichenversionen. Wird in deinem utf-8 String
> z.B. ein Minus mit dem Zeichen für Minus dargestellt, dann hast du ein
> Problem. In den iso Codierungen gibt es kein Zeichen für Minus. Es gibt
> nur ein Zeichen welches als Bindestrich und Minus gemeinsam genutzt
> wird. Das ist aber ein komplett anderes Zeichen.

Mag sein, ist mir aber auch ziemlich egal.

Wenn da einer irgendwelche komischen Strings eingibt, kanns schon sein, 
dass da nix vernueftiges dabei rauskommt. Das ist nicht tragisch. 
Tragisch waere, wenn einer Strings eingibt, die dann durch die 
Konversion laenger werden als das Original...

Gruss
WK

von foobar (Gast)


Lesenswert?

>> Solange du kein //TRANSLIT benutzt, sollte die Annahme passen.
>
> Wassndasfuernapparat?

man iconv_open:
1
ICONV_OPEN(3)            Linux Programmer's Manual           ICONV_OPEN(3)
2
3
4
5
NAME
6
       iconv_open - allocate descriptor for character set conversion
7
8
SYNOPSIS
9
       #include <iconv.h>
10
11
       iconv_t iconv_open(const char *tocode, const char *fromcode);
12
13
DESCRIPTION
14
       The  iconv_open()  function allocates a conversion descriptor suit‐
15
       able for converting byte sequences from character encoding fromcode
16
       to character encoding tocode.
17
18
       The values permitted for fromcode and tocode and the supported com‐
19
       binations are system-dependent.  For the GNU C library, the permit‐
20
       ted values are listed by the iconv --list command, and all combina‐
21
       tions of the listed values are supported.  Furthermore  the  GNU  C
22
       library and the GNU libiconv library support the following two suf‐
23
       fixes:
24
25
       //TRANSLIT
26
              When  the  string  "//TRANSLIT"  is  appended   to   tocode,
27
              transliteration  is activated.  This means that when a char‐
28
              acter cannot be represented in the target character set,  it
29
              can be approximated through one or several similarly looking
30
              characters.
31
32
       //IGNORE
33
              When the string "//IGNORE" is appended to tocode, characters
34
              that  cannot be represented in the target character set will
35
              be silently discarded.
36
37
...

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Heissen Dank. Genau so Zeugs vom Kaliber //TRANSLIT such' ich.
OK, in dem Fall ist's nicht schlimm, weil ich selbst den tocode angeb'.
Wenns aber sowas als Anweisung in utf-8 strings gaebe, das zu machen, 
wenn dieser String nach ISO-Gedoens gewandelt werden wuerde...

Gruss
WK

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.