b'\n_START_ARTICLE_\nUTF-16\n_START_SECTION_\nAnv\xc3\xa4ndning internt i program\n_START_PARAGRAPH_\nSom intern kodning i program \xc3\xa4r kodningen direkt baserad p\xc3\xa5 16-bitarstal._NEWLINE_Kodningen refereras d\xc3\xa5 till som en CEF, Character Encoding Format._NEWLINE_Huruvida dessa tal \xc3\xa4r representerade som "big-endian" eller "little-endian" \xc3\xa4r d\xc3\xa5 en helt intern sak p\xc3\xa5 l\xc3\xa5g niv\xc3\xa5. I programmen behandlar man dem som 16-bitarstal. Eftersom tecken \xc3\xb6ver 0xFFFF \xc3\xa4r s\xc3\xa4llan anv\xc3\xa4nda (till exempel utd\xc3\xb6da spr\xc3\xa5k och ovanliga kinesiska tecken), tar m\xc3\xa5nga programvaruf\xc3\xb6retag sig friheten att bara st\xc3\xb6dja tecken upp till 0xFFFF (UCS-2). Egentligen ska man anv\xc3\xa4nda UTF-16-algoritmen f\xc3\xb6r h\xc3\xb6gre teckenkoder om man lagrar 16-bits-koder (p\xc3\xa5 n\xc3\xa4tet har s\xc3\xa5dana tecken blivit vanligare efter 2015 eftersom emojis lagras s\xc3\xa5)._NEWLINE_F\xc3\xb6r m\xc3\xa5nga nyare programspr\xc3\xa5k, s\xc3\xa5som Java och C#, g\xc3\xa4ller att textstr\xc3\xa4ngar lagras under k\xc3\xb6rningen som UTF-16. Om man vill anv\xc3\xa4nda UTF-8 eller andra kodningar, finns det st\xc3\xb6d f\xc3\xb6r konvertering. F\xc3\xb6r m\xc3\xa5nga \xc3\xa4ldre programspr\xc3\xa5k s\xc3\xa5som C, \xc3\xa4r ut\xc3\xb6kad ASCII (8-bitskodning) standard, och Unicode-st\xc3\xb6d \xc3\xa4r tillagt senare i spr\xc3\xa5ken. F\xc3\xb6r dessa spr\xc3\xa5k g\xc3\xa4ller att UTF-8 fungerar b\xc3\xa4ttre, eftersom UTF-8 fungerar som en ut\xc3\xb6kad ASCII. Man beh\xc3\xb6ver inte \xc3\xa4ndra s\xc3\xa5 mycket f\xc3\xb6r att inf\xc3\xb6ra UTF-8 i ett \xc3\xa4ldre program som inte st\xc3\xb6djer Unicode. F\xc3\xb6r att inf\xc3\xb6ra UTF-16 i ett befintligt program utan Unicode m\xc3\xa5ste all kod som hanterar text skrivas om. Om man vill slippa skriva om de delar som klarar sig med ASCII, beh\xc3\xb6ver m\xc3\xa5nga funktionsanrop dubbleras, vilket gjordes med Windows n\xc3\xa4r Unicode inf\xc3\xb6rdes d\xc3\xa4r p\xc3\xa5 1990-talet.\n_START_SECTION_\nAnv\xc3\xa4ndning i filer och datakommunikation\n_START_PARAGRAPH_\nD\xc3\xa5 kodningen UTF-16 anv\xc3\xa4nds i filer, datakommunikation eller andra sammanhang d\xc3\xa4r mer \xc3\xa4n ett program kan vara inblandat m\xc3\xa5ste man i allm\xc3\xa4nhet serialisera 16-bitars-talen till en f\xc3\xb6ljd av 8-bitars-tal, d\xc3\xa5 all datakommunikation idag \xc3\xa4r baserad p\xc3\xa5 oktetter (8-bitars bytes). Kodningen kallas d\xc3\xa5 en CES, Character Encoding Scheme. Eventuell ytterligare serialisering, till till exempel fyra bitar eller en bit i taget, plus extra bitar f\xc3\xb6r felkorrigering, med mera sker p\xc3\xa5 l\xc3\xa4gre niv\xc3\xa5._NEWLINE_Serialisering till oktetter kan vara antingen big-endian (mest signifikanta oktetten f\xc3\xb6rst), \xc3\xa4ven kallad "network byte order", eller little-endian (minst signifikanta oktetten f\xc3\xb6rst)._NEWLINE_Som extern kodning, och registrerade av IANA, finns det d\xc3\xa4rf\xc3\xb6r tre kodningar:_NEWLINE_UTF-16BE (big-endian), UTF-16LE (little-endian). Big-endian \xc3\xa4r att f\xc3\xb6redra, d\xc3\xa5 detta \xc3\xa4r den konventionella "network byte order", och formellt sett den oktettordning som ISO/IEC 10646 f\xc3\xb6reskriver. Little-endian \xc3\xa4r vanligare, eftersom Windows k\xc3\xb6rs p\xc3\xa5 processorer med little-endian. Unicode till\xc3\xa5ter dock \xc3\xa4ven formellt b\xc3\xa5da serialiseringarna. Ocks\xc3\xa5 UTF-16 (utan BE eller LE) \xc3\xa4r registrerad som en charset av IANA. Det \xc3\xa4r d\xc3\xa5 big-endian, utom om filen eller datastr\xc3\xb6mmen b\xc3\xb6rjar med en byte-ordningsindikation (BOM, byte order mark, U+FEFF), som anger motsatsen. BOM ing\xc3\xa5r d\xc3\xa5 inte i text-inneh\xc3\xa5llet i filen, och skall tas bort vid deserialisering. Om de tv\xc3\xa5 f\xc3\xb6rsta oktetterna \xc3\xa4r 0xFE,0xFF har vi big-endian, och om de \xc3\xa4r 0xFF,0xFE little-endian, med tanke p\xc3\xa5 att tecknet U+FEFF \xc3\xa4r BOM och U+FFEF \xc3\xa4r ett f\xc3\xb6rbjudet tecken._NEWLINE_UTF-16 (BE eller LE) kan anv\xc3\xa4ndas f\xc3\xb6r webbsidor och andra filer, b\xc3\xa5de lokalt och publikt, om ocks\xc3\xa5 UTF-8 f\xc3\xb6redras f\xc3\xb6r webbsidor. F\xc3\xb6r e-post anv\xc3\xa4nds UTF-8 ist\xc3\xa4llet (tillsammans med ESMTP/8BIT, quoted printable eller motsvarande). Man ville h\xc3\xa5lla nere antalet olika kodningar ett e-postprogram m\xc3\xa5ste klara f\xc3\xb6r att hantera enkel text; UTF-16 inneh\xc3\xa5ller f\xc3\xb6rbjudna oktetter som \xc3\xa4nd\xc3\xa5 m\xc3\xa5ste kodas om, medan UTF-8 ofta kan \xc3\xb6verf\xc3\xb6ras som s\xc3\xa5dan. UTF-8 \xc3\xa4r ocks\xc3\xa5 mer bak\xc3\xa5tkompatibelt, s\xc3\xa5 att UTF8-kodad engelskspr\xc3\xa5kig text (och i n\xc3\xa5gon m\xc3\xa5n t.o.m. t.ex. svenskspr\xc3\xa5kig) ofta fungerar i \xc3\xa4ldre epostl\xc3\xa4sare som bara st\xc3\xb6djer ASCII, vilket inte g\xc3\xa4ller f\xc3\xb6r UTF16-kodad text._NEWLINE_I det mest spridda programmet f\xc3\xb6r rena textfiler, Windows Notepad, kan man v\xc3\xa4lja kodning i "spara som"-menyn. En av dem kallas "Unicode" och \xc3\xa4r UTF-16LE. Det finns m\xc3\xb6jlighet att v\xc3\xa4lja UTF-16BE, UTF-8 eller ANSI (8-bitars, default i v\xc3\xa4steuropeiska windowsversioner, egentligen anv\xc3\xa4nds i detta fall Windows-1252) ist\xc3\xa4llet. Windows Notepad sparar en BOM (byte order mark) f\xc3\xb6rst om det \xc3\xa4r Unicode, och om filen inneh\xc3\xa5ller till exempel en HTML-sida antas den av vissa webbl\xc3\xa4sare vara UTF-16, oberoende av vad som st\xc3\xa5r i HTTP-huvudet (som borde vara utslagsgivande), HTML-huvudet eller webbl\xc3\xa4sarens inst\xc3\xa4llningar._NEWLINE_Unix-liknande operativsystem (s\xc3\xa5som GNU/Linux) brukar anv\xc3\xa4nda UTF-8 f\xc3\xb6r Unicode och brukar inte spara en BOM f\xc3\xb6rst, d\xc3\xa5 tecknet inte till\xc3\xa5ts i vissa filer (de f\xc3\xb6rsta tecknen, eller tecken p\xc3\xa5 visst st\xc3\xa4lle r\xc3\xa4knat fr\xc3\xa5n b\xc3\xb6rjan, kan avg\xc3\xb6ra hur filen skall behandlas). UTF-16 i filer i Linux \xc3\xa4r ovanligt och finns fr\xc3\xa4mst i filer skapade i eller f\xc3\xb6r Windows-program (till exempel MS Office-filer). P\xc3\xa5 grund av problemen med UTF-16 och tack vare bak\xc3\xa5tkompatibiliteten fr\xc3\xa5n UTF-8 till ASCII, s\xc3\xa5 har UTF-8 blivit det ledande systemet f\xc3\xb6r Unicode i filer p\xc3\xa5 n\xc3\xa4tet, i alla fall i dokumentspr\xc3\xa5k som HTML och XML, medan UTF-16 \xc3\xa4r mindre anv\xc3\xa4nt._NEWLINE_Emojis som blivit popul\xc3\xa4ra i sociala medier efter 2015 lagras bland annat i intervallet U+1F000-1F9FF. Man kan ibland se att n\xc3\xa4r ett l\xc3\xa5ngt inl\xc3\xa4gg f\xc3\xb6rkortas f\xc3\xb6r att inte ta s\xc3\xa5 mycket plats syns en felindikering eftersom det 16-bitstalet f\xc3\xb6rkortats bort. N\xc3\xa4r man ber att f\xc3\xa5 l\xc3\xa4sa hela syns en emoji.\n_START_SECTION_\nBeskrivning av kodningen\n_START_PARAGRAPH_\nF\xc3\xb6r unicodetecken inom intervallet U+0000\xe2\x80\x93U+FFFF kodar man 16 bitar of\xc3\xb6r\xc3\xa4ndrat. Intervallet U+D800\xe2\x80\x93U+DFFF \xc3\xa4r dock inte till\xc3\xa5tna att anv\xc3\xa4nda ensamma f\xc3\xb6r skrivbara tecken. De \xc3\xa4r reserverade f\xc3\xb6r att hantera tecken i intervallet U+10000\xe2\x80\x93U+10FFFF enligt UTF-16:s algoritm (se nedan). De kallas ocks\xc3\xa5 surrogatkodpunkter. Ocks\xc3\xa5 vissa andra intervall \xc3\xa4r reserverade f\xc3\xb6r annat \xc3\xa4n tecken._NEWLINE_F\xc3\xb6r unicodetecken inom intervallet U+10000\xe2\x80\x93U+10FFFF f\xc3\xa5r man tv\xc3\xa5 16-bitstal p\xc3\xa5 f\xc3\xb6ljande s\xc3\xa4tt:_NEWLINE_Man subtraherar f\xc3\xb6rst 10000 (hex). Sedan tar man de bitar som \xc3\xa4r ovanf\xc3\xb6r de 10 l\xc3\xa4gsta bitarna och adderar D800 (hex) vilket blir det f\xc3\xb6rsta 16-bitstalet. Efter det tar man de 10 l\xc3\xa4gsta bitarna och adderar DC00 (hex) vilket blir det andra 16-bitstalet. _NEWLINE_Till exempel: Emojin \xf0\x9f\x8c\xb4 (palmtr\xc3\xa4d) har i Unicode  kodpunkten U+1F334 vilket blir D83C DF34 (D800+03C DC00+334) i UTF-16._NEWLINE_Genom att de l\xc3\xa4gre kodpunkterna lagras som s\xc3\xa5dana kommer tecken i intervallet U+0000\xe2\x80\x93U+00FF att inledas (eller avslutas, vid UTF-16LE) med en NULL-oktett, som har speciell betydelse i m\xc3\xa5nga sammanhang. Endera oktetten kan ocks\xc3\xa5 ha andra v\xc3\xa4rden som motsvarar kontrollkoder eller specialtecken i ASCII. D\xc3\xa4rf\xc3\xb6r \xc3\xa4r kodningen inte l\xc3\xa4mplig i sammanhang d\xc3\xa4r filen eller datastr\xc3\xb6mmen kan komma att tolkas som ASCII (som tidigare varit helt dominerande) eller UTF-8. Data kodat som ASCII eller UTF-8 kan ocks\xc3\xa5 misstas f\xc3\xb6r UTF-16 (de i UTF-16 f\xc3\xb6rbjudna oktettparen \xc3\xa4r inte vanliga i t.ex. engelsk text med dessa kodningar).'