Karakterkódolás Java VS C#

Karakterkódolás Java VS C#
2009-07-29T01:55:16+02:00
2009-07-29T12:34:41+02:00
2022-11-14T09:55:36+01:00
storm12
Üdv!

A kérdésem az lenne, hogy mi a különbség a Java és a C# karakterkódolása között.

Java

String s = "á"; for(int i = 0; i < s.getBytes("UTF-8").length; ++i) { System.out.print(s.getBytes("UTF-8")[i]); System.out.print(","); }

Kimenet: -61,-95,

C#

string s = "á"; for (int i = 0; i < Encoding.UTF8.GetBytes(s).Length; i++) { Console.Write(Encoding.UTF8.GetBytes(s)[i]); Console.Write(","); }

Kimenet: 195,161,

Csak az ékezetes karaktereknél van eltérés.

A válaszokat előre is köszönöm. Ami még furcsa, hogy a számok között pontosan 256 az eltérés minden ékezetes betűnél.

Unicode/UTF-8-character table

A karaktertábla szerint a c# os a helyes. Miért kell a szabványokat felrúgni? Gondolom azért, hogy legyen aki szívjon ezzel...
Mutasd a teljes hozzászólást!
Mind a két nyelv elvileg UTF-16-ban tárolja a sztringeket, ami egy szabványos kódolás, mint ahogy az UTF-8 is az. A különbség abból adódik, hogy a Java a byte-ot egy előjeles 8 bites típusként kezeli, míg a C# előjel nélküliként.

Java:
System.out.print((byte) 255); ==> -1
C#
Console.Write((byte) 255); ==> 255

Java a alatt a kiíratást csináld úgy, hogy:
System.out.print((int) s.getBytes("UTF-8")[i] & 0xFF);



Mutasd a teljes hozzászólást!

  • a .NET UTF16-ban (Unicode) tárolja a stringet, arra állítsd a példádban.

    szerk.: (és ha jól tudom a jáva is de most így hajnali 4-kor elbizonytalanodtam)
    Mutasd a teljes hozzászólást!
  • Java:
    String s = "á"; for(int i = 0; i < s.getBytes("UTF-16LE").length; ++i) { System.out.print(s.getBytes("UTF-16LE")[i]); System.out.print(","); }

    Kimenet: -31,0,

    C#:

    string s = "á"; for (int i = 0; i < Encoding.Unicode.GetBytes(s).Length; i++) { Console.Write(Encoding.Unicode.GetBytes(s)[i]); Console.Write(","); }

    Kimenet: 225,0
    Mutasd a teljes hozzászólást!
  • wiki

    itt valami olyan van h csak az új verziókban van utf16 jávában a régiben még ucs2 volt.

    a .net az tuti utf16, próbáld végig az összes javas encodingot hátha egyik 225,0 lesz
    Mutasd a teljes hozzászólást!
  • Eddig csak annyit találtam, hogy a java a stream eknél támogatja a standard utf-8 at, de a string konstansoknál, serializálásnál nem a szabványos utf-8 at használja.
    Mutasd a teljes hozzászólást!
  • Eddig csak annyit találtam, hogy a java a stream eknél támogatja a standard utf-8 at,

    A JAVA mást is támogat..(Supported Encodings)
    Kiemelés a link-ről:

    Sun's Java 2 Runtime Environment, Standard Edition, v. 1.3.1 for Windows comes in two different versions: US-only and international. The US-only version only supports the encodings shown in the first table. The international version (which includes the lib\i18n.jar file) supports all encodings shown on this page.
    Mutasd a teljes hozzászólást!
  • Mind a két nyelv elvileg UTF-16-ban tárolja a sztringeket, ami egy szabványos kódolás, mint ahogy az UTF-8 is az. A különbség abból adódik, hogy a Java a byte-ot egy előjeles 8 bites típusként kezeli, míg a C# előjel nélküliként.

    Java:
    System.out.print((byte) 255); ==> -1
    C#
    Console.Write((byte) 255); ==> 255

    Java a alatt a kiíratást csináld úgy, hogy:
    System.out.print((int) s.getBytes("UTF-8")[i] & 0xFF);



    Mutasd a teljes hozzászólást!
  • Köszi. Én tegnap ezt találtam.

    Modified UTF-8

    In Modified UTF-8[9] the null character (U+0000) is encoded as 0xC0,0x80 rather than 0x00, which is not valid UTF-8[10] because it is not the shortest possible representation. Modified UTF-8 strings will never contain any null-bytes,[11] which allows them (with a NUL added to the end) to be processed by the traditional ASCIIZ string functions, yet allows all Unicode values including U+0000 to be in the string.

    All known Modified UTF-8 implementations also treat the surrogate pairs as in CESU-8.

    In normal usage, the Java programming language supports standard UTF-8 when reading and writing strings through InputStreamReader and OutputStreamWriter. However it uses Modified UTF-8 for object serialization[12], for the Java Native Interface[13], and for embedding constant strings in class files[14]. Tcl also uses the same modified UTF-8[15] as Java for internal representation of Unicode data.


    Azt hittem az okozza a problémát, hogy a 0 át 2 byte ban tárolja.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd