{"title":"Unicode-data","version":"6.0","locale":"sv","docname":"ref/unicode","url":"/sv/6.0/ref/unicode/","canonical":"https://djangodocs.dev/sv/6.0/ref/unicode/","summary":"Django stöder Unicode-data överallt. I det här dokumentet beskrivs vad du behöver veta om du skriver program som använder data eller mallar som är kodade i något…","html":"<h1>Unicode-data<a class=\"heading-anchor\" href=\"#unicode-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django stöder Unicode-data överallt.</p>\n<p>I det här dokumentet beskrivs vad du behöver veta om du skriver program som använder data eller mallar som är kodade i något annat än ASCII.</p>\n<section id=\"creating-the-database\">\n<h2>Skapa databasen<a class=\"heading-anchor\" href=\"#creating-the-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Se till att din databas är konfigurerad för att kunna lagra godtyckliga strängdata. Normalt innebär detta att du ger den en kodning av UTF-8 eller UTF-16. Om du använder en mer restriktiv kodning, t.ex. latin1 (iso8859-1), kan du inte lagra vissa tecken i databasen och information går förlorad.</p>\n<ul class=\"simple\">\n<li><p>MySQL-användare, se <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/charset-database.html\">MySQL manual</a> för detaljer om hur du ställer in eller ändrar databasens teckenuppsättningskodning.</p></li>\n<li><p>PostgreSQL-användare, se <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/multibyte.html#MULTIBYTE-SETTING\">PostgreSQL-manualen</a> för information om hur du skapar databaser med rätt kodning.</p></li>\n<li><p>Oracle-användare, se <a class=\"reference external\" href=\"https://docs.oracle.com/en/database/oracle/oracle-database/21/nlspg/index.html\">Oracle manual</a> för detaljer om hur man ställer in (<a class=\"reference external\" href=\"https://docs.oracle.com/en/database/oracle/oracle-database/21/nlspg/choosing-character-set.html\">section 2</a>) eller ändrar (<a class=\"reference external\" href=\"https://docs.oracle.com/en/database/oracle/oracle-database/21/nlspg/character-set-migration.html\">section 11</a>) databasens teckenuppsättningskodning.</p></li>\n<li><p>SQLite-användare, det finns inget du behöver göra. SQLite använder alltid UTF-8 för intern kodning.</p></li>\n</ul>\n<p>Alla Djangos databasbackends konverterar automatiskt strängar till lämplig kodning för att prata med databasen. De konverterar också automatiskt strängar som hämtas från databasen till strängar. Du behöver inte ens tala om för Django vilken kodning din databas använder: det hanteras transparent.</p>\n<p>Mer information finns i avsnittet ”Databas-API:et” nedan.</p>\n</section>\n<section id=\"general-string-handling\">\n<h2>Allmän stränghantering<a class=\"heading-anchor\" href=\"#general-string-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du använder strängar med Django - t.ex. i databasuppslagningar, mallrendering eller någon annanstans - har du två val för att koda dessa strängar. Du kan använda vanliga strängar eller bytestrings (som börjar med ett ’b’).</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>En bytestring bär inte med sig någon information om dess kodning. Av den anledningen måste vi göra ett antagande, och Django antar att alla bytestrings är i UTF-8.</p>\n<p>Om du skickar en sträng till Django som har kodats i något annat format kommer saker och ting att gå fel på intressanta sätt. Vanligtvis kommer Django att höja ett <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeDecodeError</span></code> vid någon tidpunkt.</p>\n</aside>\n<p>Om din kod bara använder ASCII-data är det säkert att använda dina vanliga strängar och skicka runt dem som du vill, eftersom ASCII är en delmängd av UTF-8.</p>\n<p>Låt dig inte luras att tro att om inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a> är satt till något annat än <code class=\"docutils literal notranslate\"><span class=\"pre\">'utf-8'</span></code> så kan du använda den andra kodningen i dina bytestrings! <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a> gäller endast för de strängar som genereras som resultat av mallrendering (och e-post). Django kommer alltid att anta UTF-8-kodning för interna bytestrings. Anledningen till detta är att <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a>-inställningen faktiskt inte är under din kontroll (om du är applikationsutvecklare). Den kontrolleras av den person som installerar och använder din applikation - och om den personen väljer en annan inställning måste din kod fortfarande fungera. Den kan alltså inte förlita sig på den inställningen.</p>\n<p>I de flesta fall när Django hanterar strängar kommer den att konvertera dem till strängar innan den gör något annat. Så, som en allmän regel, om du skickar in en bytestring, var beredd på att få en sträng tillbaka i resultatet.</p>\n<section id=\"translated-strings\">\n<h3>Översatta strängar<a class=\"heading-anchor\" href=\"#translated-strings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Bortsett från strängar och bytestrings finns det en tredje typ av strängliknande objekt som du kan stöta på när du använder Django. Ramverkets internationaliseringsfunktioner introducerar konceptet ”lazy translation” - en sträng som har markerats som översatt men vars faktiska översättningsresultat inte bestäms förrän objektet används i en sträng. Denna funktion är användbar i fall där översättningslokalen är okänd tills strängen används, även om strängen ursprungligen kan ha skapats när koden först importerades.</p>\n<p>Normalt sett behöver du inte oroa dig för lata översättningar. Var bara medveten om att om du undersöker ett objekt och det påstår sig vara ett <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.functional.__proxy__</span></code>-objekt, är det en lat översättning. Om du anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">str()</span></code> med den lata översättningen som argument kommer en sträng att genereras i den aktuella språkdräkten.</p>\n<p>Mer information om lata översättningsobjekt finns i dokumentationen <a class=\"reference internal\" href=\"/sv/6.0/topics/i18n/\"><span class=\"doc\">internationalisering</span></a>.</p>\n</section>\n<section id=\"useful-utility-functions\">\n<h3>Användbara funktioner<a class=\"heading-anchor\" href=\"#useful-utility-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Eftersom vissa strängoperationer dyker upp om och om igen levereras Django med några användbara funktioner som bör göra det lite enklare att arbeta med sträng- och bytestringobjekt.</p>\n<section id=\"conversion-functions\">\n<h4>Omvandlingsfunktioner<a class=\"heading-anchor\" href=\"#conversion-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Modulen <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.encoding</span></code> innehåller några funktioner som är praktiska för att konvertera fram och tillbaka mellan strängar och bytestrings.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str(s,</span> <span class=\"pre\">encoding='utf-8',</span> <span class=\"pre\">strings_only=False,</span> <span class=\"pre\">errors='strict')</span></code> konverterar indata till en sträng. Parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code> anger kodningen för indata. (Django använder till exempel detta internt vid bearbetning av formulärinmatningsdata, som kanske inte är UTF-8-kodade) Parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">strings_only</span></code>, om den sätts till True, kommer att resultera i att Python-tal, booleaner och <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> inte konverteras till en sträng (de behåller sina ursprungliga typer). Parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code> tar något av de värden som accepteras av Pythons funktion <code class=\"docutils literal notranslate\"><span class=\"pre\">str()</span></code> för dess felhantering.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">force_str(s,</span> <span class=\"pre\">encoding='utf-8',</span> <span class=\"pre\">strings_only=False,</span> <span class=\"pre\">errors='strict')</span></code> är identisk med <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str()</span></code> i nästan alla fall. Skillnaden är när det första argumentet är en <a class=\"reference internal\" href=\"/sv/6.0/topics/i18n/translation/#lazy-translations\"><span class=\"std std-ref\">lazy translation</span></a>-instans. Medan <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str()</span></code> bevarar lata översättningar, tvingar <code class=\"docutils literal notranslate\"><span class=\"pre\">force_str()</span></code> dessa objekt till en sträng (vilket gör att översättningen sker). Normalt sett vill du använda <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str()</span></code>. Men <code class=\"docutils literal notranslate\"><span class=\"pre\">force_str()</span></code> är användbart i malltaggar och filter som absolut <em>måste</em> ha en sträng att arbeta med, inte bara något som kan konverteras till en sträng.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">smart_bytes(s,</span> <span class=\"pre\">encoding='utf-8',</span> <span class=\"pre\">strings_only=False,</span> <span class=\"pre\">errors='strict')</span></code> är i princip motsatsen till <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str()</span></code>. Den tvingar det första argumentet till en bytestring. Parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">strings_only</span></code> har samma beteende som för <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">force_str()</span></code>. Detta är något annorlunda semantik från Pythons inbyggda <code class=\"docutils literal notranslate\"><span class=\"pre\">str()</span></code>-funktion, men skillnaden behövs på några ställen inom Djangos internals.</p></li>\n</ul>\n<p>Normalt sett behöver du bara använda <code class=\"docutils literal notranslate\"><span class=\"pre\">force_str()</span></code>. Anropa den så tidigt som möjligt på alla indata som kan vara antingen en sträng eller en bytestring, och från och med då kan du behandla resultatet som att det alltid är en sträng.</p>\n</section>\n<section id=\"uri-and-iri-handling\">\n<span id=\"id1\"></span><h4>URI- och IRI-hantering<a class=\"heading-anchor\" href=\"#uri-and-iri-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Webbramverk måste hantera URL:er (som är en typ av IRI). Ett krav på URL:er är att de kodas med enbart ASCII-tecken. I en internationell miljö kan du dock behöva konstruera en URL från en <span class=\"target\" id=\"index-6\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3987.html\"><strong>IRI</strong></a> – mycket löst uttryckt, en <span class=\"target\" id=\"index-7\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3986.html\"><strong>URI</strong></a> som kan innehålla Unicode-tecken. Använd dessa funktioner för att citera och konvertera en IRI till en URI:</p>\n<ul class=\"simple\">\n<li><p>The <a class=\"reference internal\" href=\"/sv/6.0/ref/utils/#django.utils.encoding.iri_to_uri\" title=\"django.utils.encoding.iri_to_uri\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.encoding.iri_to_uri()</span></code></a> function, which implements the\nconversion from IRI to URI as required by <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3987.html#section-3.1\"><strong>RFC 3987 Section 3.1</strong></a>.</p></li>\n<li><p>Funktionerna <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">urllib.parse.quote()</span></code></a> och <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote_plus\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">urllib.parse.quote_plus()</span></code></a> från Pythons standardbibliotek.</p></li>\n</ul>\n<p>Dessa två grupper av funktioner har lite olika syften, och det är viktigt att hålla isär dem. Normalt sett använder du <code class=\"docutils literal notranslate\"><span class=\"pre\">quote()</span></code> på de enskilda delarna av IRI:n eller URI-sökvägen så att alla reserverade tecken som ’&amp;’ eller ’%’ kodas korrekt. Sedan använder du <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> på hela IRI:n och konverterar alla icke-ASCII-tecken till rätt kodade värden.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Tekniskt sett är det inte korrekt att säga att <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> implementerar hela algoritmen i IRI-specifikationen. Den utför inte (ännu) den internationella domännamnskodningsdelen av algoritmen.</p>\n</aside>\n<p>Funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> ändrar inte ASCII-tecken som annars är tillåtna i en URL. Så till exempel kodas inte tecknet ’%’ ytterligare när det skickas till <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code>. Detta innebär att du kan skicka en fullständig URL till den här funktionen och den kommer inte att röra till frågesträngen eller något liknande.</p>\n<p>Ett exempel skulle kunna förtydliga saken:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">urllib.parse</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">quote</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.encoding</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">iri_to_uri</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">quote</span><span class=\"p\">(</span><span class=\"s2\">&quot;Paris &amp; Orléans&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;Paris%20%26%20Orl%C3%A9ans&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">iri_to_uri</span><span class=\"p\">(</span><span class=\"s2\">&quot;/favorites/François/</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">quote</span><span class=\"p\">(</span><span class=\"s2\">&quot;Paris &amp; Orléans&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&#39;/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans&#39;</span>\n</code></pre></div>\n<p>Om du tittar noga kan du se att den del som genererades av <code class=\"docutils literal notranslate\"><span class=\"pre\">quote()</span></code> i det andra exemplet inte var dubbelciterad när den skickades till <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code>. Detta är en mycket viktig och användbar funktion. Det innebär att du kan konstruera din IRI utan att oroa dig för om den innehåller icke-ASCII-tecken och sedan, precis i slutet, anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> på resultatet.</p>\n<p>Similarly, Django provides <a class=\"reference internal\" href=\"/sv/6.0/ref/utils/#django.utils.encoding.uri_to_iri\" title=\"django.utils.encoding.uri_to_iri\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.encoding.uri_to_iri()</span></code></a> which\nimplements the conversion from URI to IRI as per <span class=\"target\" id=\"index-3\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3987.html#section-3.2\"><strong>RFC 3987 Section 3.2</strong></a>.</p>\n<p>Ett exempel för att visa:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.encoding</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">uri_to_iri</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">uri_to_iri</span><span class=\"p\">(</span><span class=\"s2\">&quot;/</span><span class=\"si\">%E</span><span class=\"s2\">2</span><span class=\"si\">%99%</span><span class=\"s2\">A5</span><span class=\"si\">%E</span><span class=\"s2\">2</span><span class=\"si\">%99%</span><span class=\"s2\">A5/?utf8=</span><span class=\"si\">%E</span><span class=\"s2\">2%9C%93&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;/♥♥/?utf8=✓&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">uri_to_iri</span><span class=\"p\">(</span><span class=\"s2\">&quot;%A9hello</span><span class=\"si\">%3F</span><span class=\"s2\">world&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;%A9hello%3Fworld&#39;</span>\n</code></pre></div>\n<p>I det första exemplet är UTF-8-tecken inte citerade. I det andra förblir procentkodningarna oförändrade eftersom de ligger utanför det giltiga UTF-8-intervallet eller representerar ett reserverat tecken.</p>\n<p>Både funktionerna <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">uri_to_iri()</span></code> är idempotenta, vilket innebär att följande alltid är sant:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">iri_to_uri</span><span class=\"p\">(</span><span class=\"n\">iri_to_uri</span><span class=\"p\">(</span><span class=\"n\">some_string</span><span class=\"p\">))</span> <span class=\"o\">==</span> <span class=\"n\">iri_to_uri</span><span class=\"p\">(</span><span class=\"n\">some_string</span><span class=\"p\">)</span>\n<span class=\"n\">uri_to_iri</span><span class=\"p\">(</span><span class=\"n\">uri_to_iri</span><span class=\"p\">(</span><span class=\"n\">some_string</span><span class=\"p\">))</span> <span class=\"o\">==</span> <span class=\"n\">uri_to_iri</span><span class=\"p\">(</span><span class=\"n\">some_string</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Så du kan säkert anropa den flera gånger på samma URI/IRI utan att riskera problem med dubbelkvotering.</p>\n</section>\n</section>\n</section>\n<section id=\"models\">\n<h2>Modeller<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Eftersom alla strängar returneras från databasen som <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>-objekt, kommer modellfält som är teckenbaserade (CharField, TextField, URLField, etc.) att innehålla Unicode-värden när Django hämtar data från databasen. Detta är <em>alltid</em> fallet, även om data skulle kunna passa in i en ASCII-bytestring.</p>\n<p>Du kan skicka in bytestrings när du skapar en modell eller fyller i ett fält, och Django konverterar det till strängar när det behövs.</p>\n<section id=\"taking-care-in-get-absolute-url\">\n<h3>Ta hand om <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code><a class=\"heading-anchor\" href=\"#taking-care-in-get-absolute-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Webbadresser kan bara innehålla ASCII-tecken. Om du konstruerar en URL från bitar av data som kan vara icke-ASCII, var noga med att koda resultaten på ett sätt som är lämpligt för en URL. Funktionen <a class=\"reference internal\" href=\"/sv/6.0/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> hanterar detta åt dig automatiskt.</p>\n<p>Om du konstruerar en URL manuellt (dvs. <em>inte</em> använder funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse()</span></code>), måste du själv ta hand om kodningen. I det här fallet använder du funktionerna <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">quote()</span></code> som dokumenterades <a class=\"reference internal\" href=\"#id1\">ovan</a>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">urllib.parse</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">quote</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.encoding</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">iri_to_uri</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/person/</span><span class=\"si\">%s</span><span class=\"s2\">/?x=0&amp;y=0&quot;</span> <span class=\"o\">%</span> <span class=\"n\">quote</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">location</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">iri_to_uri</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Denna funktion returnerar en korrekt kodad URL även om <code class=\"docutils literal notranslate\"><span class=\"pre\">self.location</span></code> är något i stil med ”Jack besökte Paris &amp; Orléans”. (I själva verket är anropet <code class=\"docutils literal notranslate\"><span class=\"pre\">iri_to_uri()</span></code> inte nödvändigt i exemplet ovan, eftersom alla icke-ASCII-tecken skulle ha tagits bort vid citering i den första raden)</p>\n</section>\n</section>\n<section id=\"templates\">\n<h2>Mallar<a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Använd strängar när du skapar mallar manuellt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Template</span>\n\n<span class=\"n\">t2</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"s2\">&quot;This is a string template.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>But the common case is to read templates from the filesystem. If your template\nfiles are not stored with a UTF-8 encoding, adjust the <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a>\nsetting. The built-in <a class=\"reference internal\" href=\"/sv/6.0/topics/templates/#module-django.template.backends.django\" title=\"django.template.backends.django\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django</span></code></a> backend\nprovides the <code class=\"docutils literal notranslate\"><span class=\"pre\">'file_charset'</span></code> option to change the encoding used to read\nfiles from disk.</p>\n<p>Inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a> styr kodningen av renderade mallar. Den är inställd på UTF-8 som standard.</p>\n<section id=\"template-tags-and-filters\">\n<h3>Taggar och filter för mallar<a class=\"heading-anchor\" href=\"#template-tags-and-filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Några tips att tänka på när du skriver dina egna malltaggar och filter:</p>\n<ul class=\"simple\">\n<li><p>Returnera alltid strängar från en malltaggs <code class=\"docutils literal notranslate\"><span class=\"pre\">render()</span></code>-metod och från mallfilter.</p></li>\n<li><p>Använd <code class=\"docutils literal notranslate\"><span class=\"pre\">force_str()</span></code> i stället för <code class=\"docutils literal notranslate\"><span class=\"pre\">smart_str()</span></code> på dessa ställen. Rendering av taggar och filteranrop sker när mallen renderas, så det finns ingen fördel med att skjuta upp konverteringen av lazy translation-objekt till strängar. Det är lättare att arbeta enbart med strängar vid den tidpunkten.</p></li>\n</ul>\n</section>\n</section>\n<section id=\"files\">\n<span id=\"unicode-files\"></span><h2>Filer<a class=\"heading-anchor\" href=\"#files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du tänker tillåta användare att ladda upp filer måste du se till att miljön som används för att köra Django är konfigurerad för att fungera med icke-ASCII-filnamn. Om din miljö inte är korrekt konfigurerad kommer du att stöta på <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeEncodeError</span></code>-undantag när du sparar filer med filnamn eller innehåll som innehåller icke-ASCII-tecken.</p>\n<p>Filsystemets stöd för UTF-8-filnamn varierar och kan bero på miljön. Kontrollera din aktuella konfiguration i ett interaktivt Python-skal genom att köra:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">sys</span>\n\n<span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">getfilesystemencoding</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Utmatningen bör vara ”UTF-8”.</p>\n<p>Miljövariabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">LANG</span></code> är ansvarig för att ställa in den förväntade kodningen på Unix-plattformar. I dokumentationen för ditt operativsystem och din applikationsserver finns information om lämplig syntax och plats för att ange den här variabeln. Se <a class=\"reference internal\" href=\"/sv/6.0/howto/deployment/wsgi/modwsgi/\"><span class=\"doc\">Så här använder du Django med Apache och mod_wsgi</span></a> för exempel.</p>\n<p>I din utvecklingsmiljö kan du behöva lägga till en inställning i din <code class=\"docutils literal notranslate\"><span class=\"pre\">~.bashrc</span></code> som motsvarar:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">LANG</span><span class=\"o\">=</span><span class=\"s2\">&quot;en_US.UTF-8&quot;</span>\n</code></pre></div>\n</section>\n<section id=\"form-submission\">\n<h2>Inlämning av formulär<a class=\"heading-anchor\" href=\"#form-submission\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Inlämning av HTML-formulär är ett knepigt område. Det finns ingen garanti för att inlämningen kommer att innehålla kodningsinformation, vilket innebär att ramverket kan behöva gissa sig till kodningen av inlämnade data.</p>\n<p>Django använder ett ”lata” tillvägagångssätt för att avkoda formulärdata. Data i ett <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code>-objekt avkodas endast när du kommer åt det. Faktum är att de flesta data inte avkodas alls. Endast datastrukturerna <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest.GET</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest.POST</span></code> har någon avkodning tillämpad på dem. Dessa två fält kommer att returnera sina medlemmar som Unicode-data. Alla andra attribut och metoder i <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> returnerar data exakt som de skickades av klienten.</p>\n<p>Som standard används inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_CHARSET</span></code></a> som den förmodade kodningen för formulärdata. Om du behöver ändra detta för ett visst formulär kan du ställa in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code> på en <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code>-instans. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">some_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># We know that the data must be encoded as KOI8-R (for some reason).</span>\n    <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">encoding</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;koi8-r&quot;</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Du kan till och med ändra kodningen efter att ha använt <code class=\"docutils literal notranslate\"><span class=\"pre\">request.GET</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code>, och alla efterföljande åtkomster kommer att använda den nya kodningen.</p>\n<p>De flesta utvecklare behöver inte bekymra sig om att ändra formulärkodning, men det här är en användbar funktion för applikationer som pratar med äldre system vars kodning du inte kan kontrollera.</p>\n<p>Django avkodar inte data från filuppladdningar, eftersom dessa data normalt behandlas som samlingar av bytes, snarare än strängar. Varje automatisk avkodning där skulle ändra betydelsen av strömmen av bytes.</p>\n</section>","rootId":"unicode-data","toc":[{"title":"Skapa databasen","anchor":"creating-the-database","children":[]},{"title":"Allmän stränghantering","anchor":"general-string-handling","children":[{"title":"Översatta strängar","anchor":"translated-strings","children":[]},{"title":"Användbara funktioner","anchor":"useful-utility-functions","children":[{"title":"Omvandlingsfunktioner","anchor":"conversion-functions","children":[]},{"title":"URI- och IRI-hantering","anchor":"uri-and-iri-handling","children":[]}]}]},{"title":"Modeller","anchor":"models","children":[{"title":"Ta hand om get_absolute_url()","anchor":"taking-care-in-get-absolute-url","children":[]}]},{"title":"Mallar","anchor":"templates","children":[{"title":"Taggar och filter för mallar","anchor":"template-tags-and-filters","children":[]}]},{"title":"Filer","anchor":"files","children":[]},{"title":"Inlämning av formulär","anchor":"form-submission","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.0/ref/"}],"prev":{"docname":"ref/template-response","title":"TemplateResponse och SimpleTemplateResponse","url":"/sv/6.0/ref/template-response/"},"next":{"docname":"ref/urlresolvers","title":"django.urls verktygsfunktioner","url":"/sv/6.0/ref/urlresolvers/"},"formats":{"html":"/sv/6.0/ref/unicode/","markdown":"/sv/6.0/ref/unicode.md","json":"/sv/6.0/ref/unicode.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/unicode.txt","official":"https://docs.djangoproject.com/sv/6.0/ref/unicode/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}