Unicode vs UTF-8 σύγχυση σε Python / Django;




Σκόνταψα πάνω από αυτό το απόσπασμα στο [φροντιστήριο Django](http://www.djangoproject.com/documentation/tutorial01/) :



> 
> Μοντέλα Django έχουν μια προκαθορισμένη **str** () μέθοδος που απαιτεί **Unicode** () και μετατρέπει το αποτέλεσμα σε UTF-8 bytestring. Αυτό σημαίνει ότι unicode (ρ) θα επιστρέψει μια συμβολοσειρά Unicode, και str (ρ) θα επιστρέψει μια κανονική συμβολοσειρά, με χαρακτήρες κωδικοποιούνται ως UTF-8.
> 
> 
> 


Τώρα, είμαι μπερδεμένος γιατί afaik Unicode δεν είναι κάποια συγκεκριμένη παράσταση, έτσι ώστε ό, τι είναι μια «Unicode string» σε Python; Μήπως αυτό σημαίνει ότι UCS-2; Googling εμφανίστηκε [αυτό το «Python Unicode Tutorial»](http://www.reportlab.com/i18n/python_unicode_tutorial.html) , που δηλώνει με τόλμη



> 
> Unicode είναι ένα δύο-byte κωδικοποίηση η οποία καλύπτει το σύνολο των κοινών συστημάτων γραφής του κόσμου.
> 
> 
> 


το οποίο είναι απλό λάθος, ή μήπως είναι; Έχω μπερδευτεί πολλές φορές από το σύνολο χαρακτήρων και θέματα κωδικοποίησης, αλλά εδώ είμαι απολύτως βέβαιος ότι η τεκμηρίωση Διαβάζω είναι συγκεχυμένη. Ξέρει κανείς τι συμβαίνει στην Python, όταν μου δίνει μια «Unicode συμβολοσειρά»;
> 
> αυτό είναι ένα «Unicode string» σε Python; Μήπως αυτό σημαίνει ότι UCS-2;
> 
> 
> 


Οι συμβολοσειρές Unicode σε Python αποθηκεύεται εσωτερικά είτε ως UCS-2 (σταθερού μήκους 16-bit αναπαράσταση, σχεδόν το ίδιο όπως UTF-16) ή UCS-4 / UTF-32 (σταθερού μήκους αναπαράσταση 32-bit). Είναι μια επιλογή μεταγλώττισης? για τα Windows είναι πάντα UTF-16, ενώ πολλές διανομές Linux που UTF-32 (ευρείας οθόνης) για τις εκδόσεις τους Python.


Μπορείτε γενικά δεν πρέπει να φροντίσουν: θα δείτε Unicode κωδικό σημεία ως ενιαία στοιχεία σε χορδές σας και δεν θα ξέρετε αν είναι αποθηκευμένα σε δύο ή τέσσερα bytes. Αν είστε σε μια UTF-16 κατασκευής και θα πρέπει να χειριστεί τους χαρακτήρες εκτός του βασικού πολύγλωσσο αεροπλάνο θα σας κάνουν λάθος, αλλά αυτό είναι ακόμα πολύ σπάνια, και οι χρήστες που χρειάζονται πραγματικά τα επιπλέον χαρακτήρες θα πρέπει να κατάρτιση ευρύ χτίζει.



> 
> απλό λάθος, ή μήπως είναι;
> 
> 
> 


Ναι, αυτό είναι εντελώς λάθος. Για να είμαστε δίκαιοι νομίζω ότι το σεμινάριο είναι αρκετά παλιά? κατά πάσα πιθανότητα προ-ημερομηνίες μεγάλη χορδές Unicode, αν όχι Unicode 3.1 (η έκδοση που εισήγαγε χαρακτήρες εκτός του βασικού πολύγλωσσο αεροπλάνο).


Υπάρχει μια πρόσθετη πηγή σύγχυσης που απορρέουν από τη συνήθεια των Windows για τη χρήση του όρου «Unicode» να σημαίνει, συγκεκριμένα, η κωδικοποίηση UTF-16LE που NT χρησιμοποιεί εσωτερικά. Άνθρωποι από Microsoftland μπορεί συχνά να αντιγράψετε αυτό το κάπως παραπλανητική συνήθεια.
[εικόνα] raik:

μηπως παιζει ρολο οτι γλωσσα εχει ελληνικα αλλά στο πεδιο περιοχη εχει german, austria utf-8

και εγώ πιστεύω ότι κάτι εκεί έχει στραβώσει με τα locale, μια ιδέα είναι να τα κάνει πρώτα όλα αμερικανικά, να φτιάξει έτσι το πρόβλημα και μετά να αρχίσει να τα γυρνάει ένα-ένα όπως τ… εγκατέστησα την τελευταία έκδοση του προγράμματος και εξακολουθούσα να έχω το ίδιο πρόβλημα. τελικά με τη βοήθεια απο το σχετικό [google group](https://groups.google.com/g/devede-forum/c/2thoie_dsxq) του devedeng, κατάλαβα οτι επιλέγω λάθος encoding type για το αρχείο υποτίτλων που θέλω να βάλω στην ταινία.

όταν επέλεξα το σωστό τύπο encoding για το αρχε… Το πρόβλημα προκλήθηκε λόγω των ειδικών χαρακτήρων. Δεν είχα φανταστεί ότι «$» θα ήταν μια τέτοια μεγάλη υπόθεση σε κωδικούς πρόσβασης. Τέλος πάντων μπορείτε να βρείτε μια λύση για αυτό [εδώ](https://nadvi.blogspot.com/2011/02/oracle-password-with-or-special.html) . Αυτό είναι ένα τεχνικό πρόβλημα παρακαλώ να κάνετε μια αναφορά εδώ.



> 
> <https://support.duolingo.com/hc/el>
> 
> 
> δεν έχεις αρκετές γραμματοσειρές στο σύστημα σου για να γίνει καλή αντιστοίχηση.

δοκίμασε:

sudo apt install ttf-mscorefonts-installer

sudo fc-cache -f -v

αν έχεις και εγκατάσταση windows μπορείς να κλέψεις τις γραμματοσειρές από εκεί. μάλιστα… μετά από μια ώρα ψάξιμο για ό,τι μπορείτε να φανταστείτε (character encoding μήπως δεν έπαιρνε τα "\ " για το κενό, δοκιμές με άλλους editors και χίλια δυο άλλο σχετικά και άσχετα και αφού ποστάρω το ερώτημα εδώ βρήκα τη λύση της μαμακίας μου σε δυο λεπτά.

λέω δεν κάνω copy paste από το te… κάτι έχει γίνει λάθος στην περίπτωσης σου διότι αυτή η μετάφραση χρησιμοποιείται σε αρκετές επαγγελματικές εγκαταστάσεις εταιρειών (με εξαίρεση κάποιες περιπτώσεις που είναι custom μεταφράσεις εξειδίκευσης π.χ. ιατρεία, οδοντιατρεία, δικηγορικά γραφεία και δεν είναι online) <p>είχα το ίδιο πρόβλημα χρησιμοποιώντας asp.net mvc και <a href="http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/">βρήκα τη λύση εδώ</a> </p><blockquote> <p>υπάρχει μεγάλη σύγχυση μεταξύ των νεοεισερχομένων στο <strong> angularjs </strong> για το γιατί οι <code>$http</code> λειτουργίες στενογραφίας της υπηρεσίας (<code>$http.post()</code>, κλπ.) δεν φαίνονται να είναι εναλλάξιμες με το <strong> ισοδύναμα jquery </strong> (<code>jquery.post()</code>, κ.λπ.)</p> <p>η διαφορά είναι στον τρόπο <strong> jquery </strong> και <strong> angularjs </strong> σειριοποίηση και μετάδοση των δεδομένων. βασικά, το πρόβλημα έγκειται στη γλώσσα του server σας που δεν είναι σε θέση να καταλάβει τη μετάδοση του angularjs με εγγενή ... από προεπιλογή, <strong> jquery </strong> μεταδίδει δεδομένα χρησιμοποιώντας</p> <pre><code>content-type: x-www-form-urlencoded </code></pre> <p>και την εξοικειωμένη σειριοποίηση <code>foo=bar&amp;baz=moe</code>.</p> <p><strong> το angularjs </strong>, ωστόσο, μεταδίδει δεδομένα χρησιμοποιώντας</p> <pre><code>content-type: application/json </code></pre> <p>και <code>{ "foo": "bar", "baz": "moe" }</code></p> <p>η σειριοποίηση json, η οποία, δυστυχώς, μερικές γλώσσες διακομιστή web - <em> και συγκεκριμένα η php </em> - δεν απομακρύνονται εγγενώς.</p> </blockquote><p>δουλεύει άψογα.</p><p><b>κωδικας</b></p><pre><code>// your app's root module... angular.module('mymodule', [], function($httpprovider) { // use x-www-form-urlencoded content-type $httpprovider.defaults.headers.post['content-type'] = 'application/x-www-form-urlencoded;charset=utf-8'; /** * the workhorse; converts an object to x-www-form-urlencoded serialization. * @param {object} obj * @return {string} */ var param = function(obj) { var query = '', name, value, fullsubname, subname, subvalue, innerobj, i; for(name in obj) { value = obj[name]; if(value instanceof array) { for(i=0; i&lt;value.length; ++i) { subvalue = value[i]; fullsubname = name + '[' + i + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(innerobj) + '&amp;'; } } else if(value instanceof object) { for(subname in value) { subvalue = value[subname]; fullsubname = name + '[' + subname + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(innerobj) + '&amp;'; } } else if(value !== undefined &amp;&amp; value !== null) query += encodeuricomponent(name) + '=' + encodeuricomponent(value) + '&amp;'; } return query.length ? query.substr(0, query.length - 1) : query; }; // override $http service's default transformrequest $httpprovider.defaults.transformrequest = [function(data) { return angular.isobject(data) &amp;&amp; string(data) !== '[object file]' ? param(data) : data; }]; }); </code></pre> [εικόνα] gnutechie:

ισως το sudo δεν παιζει και καλη μπαλα με τετοιες εντολες

ας λύσουμε το μυστήριο. το sudo δουλεύει για μια μόνο εντολή. μα μία δεν είναι εύλογα θα αναρωτηθείς; όχι αν ξέρεις ένα βαθιά κρυμμένο “μυστικό”. οι ανακατευθύνσεις είναι πίπες (δηλαδή pipes/σωλήνες, αλλά έτσι δεν θ… [εικόνα] petrosmpam:

πιθανολογώ οτι φταίει το nemo άρα.

τώρα που το λες έχω ξανακούσει παλιότερα για προβλήματα στις αντιγραφές με τον nemo (δεν είχα εγώ τέτοια για τον απλό λόγο ότι δεν χρησιμοποιώ mint/cinnamon/nemo). αν υπάρχει τέτοιο bug η κοινότητα τού mint/cinnamon θα έπρεπε να το έχει …