En inblick i .NETs unicode-stöd

muir-woods-mossy-ferns

Modern teckenkodning - en djungel

Alltid när jag närmar mig unicode är det med en viss respekt. Det är ett ämne som på ytan verkar enkelt, men när man gräver lite är det minsann inte så lite komplicerat.

I mitt fall handlar det om att använda mig av ett C-bibliotek för att accessa en databasfil (sqlite3). Och allt ska såklart vara i Unicode.

Efter nån dags murvlande har jag snappat upp några guldkorn som jag tänkte dela med mig for the good of mankind så att säga:

  • .NET stödjer Unicode fullt ut, med surrogatpar och allt annat mysigt Unicode-grottan tillhandahåller
  • Typen string i C# är en lista med char, och string.Length anger antalet chars i en string
  • En char är _alltid_ 16 bitar lång i .NET
  • Vissa Unicode-tecken, t.ex. den babooschka-liknande symbolen med hex-värde 0x10338 (decimalt 66360) (om någon vet hur jag skriver detta i HTML – kommentera gärna!), kodas med hjälp av två chars, dvs. string.Length på en sträng med endast detta tecken blir två chars långt!
  • Det är alltså viktigt att särskilja tecken och char i .NET!
  • För att konvertera ett unicodetecken i heltalsform till en .NET string kan man använda char.ConvertFromUtf32(heltal) som ger en string (den kan inte ge en char för alla unicode-tecken får inte plats i en enskild char!)
  • För att konvertera från surrogate-pair till int kan den omvända funktionen användas: char.ConvertToUtf32(low,high) (alternativt indexering in i char-position i en string: char.ConvertToUtf32(s, 0) om första tecknet i strängen önskas i heltalsform!)

Sidan ”Unicode and .NET” var till stor hjälp. Likaså unicode.com för att hitta unikum-tecken som den där bysten ovan.

Unicode-symbolen med heltal 12345 ser ut så här i symbolform: あ

Taggar: , ,

8 Responses to En inblick i .NETs unicode-stöd

  1. Tobias Strandh skriver:

    Hej Olof

    Du hade en fråga om TDD-grupper i väst. Vet inte om exakt TDD-grupper finns, men kolla gärna på;

    http://www.swenug.com (.NET)
    http://www.javaforum.se (Java)
    http://www.iasa.se (Arkitekt, oberoende)

    Samtliga föreningar finns här i Göteborg!

    mvh/Tobias Strandh, Informator

  2. Olof Bjarnason skriver:

    Tack Tobias! Speciellt swenug verkar intressant, för mig som .NET-utvecklare!

  3. JörgenL skriver:

    Lista hela Unicode i webbläsaren:

    <!–
    document.write()

    for (i=0;i<255*255;++i)
    {
    document.write(””)
    document.write(”&#”+(i))
    document.write(”;”)
    if (i % 30 == 0)
    document.write(”\n”)
    }
    //–>

    Koden för att skicka ut unicode från ett decimalt tal i HTML är alltså &#66360;

  4. JörgenL skriver:

    Hmm tappade bort några HTML-taggar i koden där…

  5. Olof Bjarnason skriver:

    Tack JörgenL!

  6. Michael Kjörling skriver:

    Lättare när man har Unicode ”code point” i hexadecimal form är helt enkelt &#xXXXX; (ampersand, fyrkantstecken, lilla x, hexvärde, semikolon). Se till exempel http://www.w3.org/TR/html401/charset.html#h-5.3.1

  7. Olof Bjarnason skriver:

    Tack för eran hjälp!

Lämna en kommentar