Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι
  • Σελίδα:
  • 1
  • 2

ΘΕΜΑ: decode-encode string σε ελληνικα

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4213

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Καλησπέρα σας!

Δουλεύω πάνω σε ένα application με Django.

Σε αυτό το app λοιπόν υπάρχει επιλογή να "κατεβάσει" τα e-mail του από οποιοδήποτε λογαριασμό θέλει.

Στο σημείο λοιπόν που θέλω να πάρω τα συννημένα του mail χρησιμοποιώ τη μεθοδο get_filename() για να παρω το όνομα του αρχείου.

Αυτό μου επιστρέφει ενα string αυτής της μορφής:

'=?UTF-8?B?zrXOs86zz4HOsc+Gzr8xLmRvYw==?='


Μετα από πολύ κόπο κατάφερα να το "γυρίσω" σε utf-8 με τον παρακάτω κώδικα:
filename = part.get_filename()
 
if filename[:11] == '=?KOI8-R?B?':
	filename = base64.b64decode(filename[11:]).decode('KOI8-R')
if filename[:10] == '=?UTF-8?B?':
	filename = base64.b64decode(filename[10:])    
 
/*Εδώ περνάω τα filenames σε μία λίστα ,
για κάθε email ξεχωριστά πάντα γιατί εμφανίζω 
σε ενα template λίστα των email με τα
attachements τους.*/
 
filenames_list.append(filename)

Αυτό μου επιστρέφει ενα string αυτής της μορφής:
'\xce\xb5\xce\xb3\xce\xb3\xcf\x81\xce\xb1\xcf\x86\xce\xbf1.doc'

Εχω προσπαθήσει να ξανακάνω encode,decode με διάφορες κωδικοποιήσεις (utf-8,iso-8859-7, ακομη και latin1) αλλά μάταια.

Καμία ιδέα? Μήπως το κοιτάω εντέλως λάθος?

Ευχαριστώ εκ των προτέρων!
 
May the code be with you always!
Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από Danee. Αιτία: στοιχιση κώδικα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4215

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Θα βοηθούσε αν έδινες κάποιον απλό κώδικα που να περιέχει όλα τα στάδια των μετατροπών (με το αρχικό filename text που παίρνεις) που να τρέχει...
Επίσης σε τι python δουλεύεις?
Η 2.x με την 3.x διαφέρουν πολύ στην διαχείριση κειμένων...
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4216

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Μα αυτά είναι τα στάδια μετατροπών και τα αποτελέσματα που παίρνω :unsure:
Δουλεύω σε Python 2.7.6.
Αν εννοείς από που παίρνω το filename...ο κώδικας που αφορά τα συννημένα του κάθε e-mail ειναι ο εξής:
 
                if message.get_content_maintype() == 'multipart':
                        filenames_list = []           
                        for part in message.walk():
                            print("part.get_content_maintype ",part.get_content_maintype())
                            #find the attachment
                            if part.get_content_maintype() == 'multipart': continue
                            if part.get_content_maintype() == 'text': continue
                            if part.get('Content-Disposition') == 'inline': continue
                            if part.get('Content-Disposition') is None: continue
 
 
                            #get filename
                            filename = part.get_filename()
 
                            if filename[:11] == '=?KOI8-R?B?':
                                filename = base64.b64decode(filename[11:]).decode('KOI8-R')
                            if filename[:10] == '=?UTF-8?B?':
                                filename = base64.b64decode(filename[10:])    
 
	                    #create a list containing all filenames   
                            filenames_list.append(filename)
                            print ("list:",filenames_list)
                            #put list in context
                            mymail2['attachment'] = filenames_list
 
 
                /*Στο τέλος πλέον όλα τα mail περνάνε σε μία λίστα*/      
                mails.append(mymail2)
                context['data'] = mails
May the code be with you always!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4217

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Danee έγραψε:
Αν εννοείς από που παίρνω το filename...ο κώδικας που αφορά τα συννημένα του κάθε e-mail ειναι ο εξής:
Ναι, μάλλον δεν το διατύπωσα καλά...
Εννοούσα το αρχικό value του filename.
Δηλαδή, το αποτέλεσμα του
print(repr(filename))
μετά το
filename = part.get_filename()
ώστε να μπορώ να τρέξω τις μετατροπές...
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4218

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Σε αρχεία με ελληνικό όνομα επιστρέφει :

('=?UTF-8?B?zrXOs86zz4HOsc+Gzr8xMi5kb2M=?=')

Σε αρχεία με λατινική ονομασία:

('test.odt')
May the code be with you always!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4219

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
ΟΚ. Εμένα λοιπόν όταν τρέχω αυτόν τον κώδικα:
filename = '=?UTF-8?B?zrXOs86zz4HOsc+Gzr8xMi5kb2M=?='
if filename[:11] == '=?KOI8-R?B?':
    filename = base64.b64decode(filename[11:]).decode('KOI8-R')
if filename[:10] == '=?UTF-8?B?':
    filename = base64.b64decode(filename[10:])
print(filename)

μου τυπώνει:
εγγραφο12.doc

Τρέχω python 2.7.11, αλλά η σοβαρότερη διαφορά πρέπει να είναι ότι χρησιμοποιώ από το
from __future__ import  unicode_literals
και το script χρησιμοποιεί UTF-8 encoding - στην πρώτη σειρά γράφεις
# coding=utf-8
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4220

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Μα και εμένα απο τη στιγμή που αποφάσισα να τα βάλω σε λίστα ξεκίνησε το θέμα με το encoding.

Στην κονσόλα και εμένα σωστά μου το τυπώνει.

Το πρόβλημα ξεκινά όταν το filename μπαινει μεσα στη λίστα.
May the code be with you always!
Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από Danee.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4222

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Danee έγραψε:
Μα και εμένα απο τη στιγμή που αποφάσισα να τα βάλω σε λίστα ξεκίνησε το θέμα με το encoding.
Στην κονσόλα και εμένα σωστά μου το τυπώνει.
Το πρόβλημα ξεκινά όταν το filename μπαινει μεσα στη λίστα.
Ε, λοιπόν, από ότι φαίνεται δεν έχω καταλάβει το πρόβλημα σου...
Αν το filename είναι στα ελληνικά και τα filenames μέσα στην λίστα είναι επίσης στα ελληνικά, πχ. ο κώδικας:
filename = '=?UTF-8?B?zrXOs86zz4HOsc+Gzr8xMi5kb2M=?='
filenames_list = []
if filename[:11] == '=?KOI8-R?B?':
    filename = base64.b64decode(filename[11:]).decode('KOI8-R')
if filename[:10] == '=?UTF-8?B?':
    filename = base64.b64decode(filename[10:])
filenames_list.append(filename)
print(filenames_list[0])
μου τυπώνει κανονικά ελληνικά,
τότε πιο είναι το πρόβλημα?
Ότι βλέπεις τα filenames μέσα στην λίστα encoded σε UTF-8?
Μα αφού είναι encoded σε UTF-8...
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4223

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Στην αρχή του main αρχείου , δηλαδή του αρχείο.py που ξεκινάει όλο το πρόγραμμα βάλε την παρακάτω οδηγία για τον interpenter της python:
# -*- coding: utf-8 -*-

Επίσης ξανά βεβαιώσου ότι στην μέθοδο που διαβάζεις τον όνομα του αρχείου χρησιμοποιείς και εκεί utf-8.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4225

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Όταν κάνω print(filenames_list[0]) μου τυπώνει ελληνικά.
Όταν κάνω print(filenames_list) μου τυπώνει αυτό
'\xce\xb5\xce\xb3\xce\xb3\xcf\x81\xce\xb1\xcf\x86\xce\xbf1.doc'
Φυσικά και έχω το
# -*- coding: utf-8 -*-
στην αρχή των scripts μου.
Άλλωστε η εφαρμογή έχει κυρίως ελληνικά.

Εγώ χρειάζομαι όλη τη λίστα να τυπώνω. Γιατί η λίστα γεμίζει κάθε φορά με τα filenames_list των attachments του κάθε message.
May the code be with you always!
Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από Danee.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4226

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Danee έγραψε:
Όταν κάνω print(filenames_list[0]) μου τυπώνει ελληνικά.
Όταν κάνω print(filenames_list) μου τυπώνει αυτό
'\xce\xb5\xce\xb3\xce\xb3\xcf\x81\xce\xb1\xcf\x86\xce\xbf1.doc'

Κανονικά η python θα σου τύπωνε μια λίστα με όλα τα στοιχεία της.
Επειδή όταν γράφεις print(lista) για να τυπώσεις μια ολόκληρη λίστα,
η python κάνει κάποια διαδικασία όπως αυτές τις δύο που θα δεις παρακάτω.
Ίσος για κάποιον λόγο δεν μπορεί να καταλάβει το encoding. Δοκίμασε έναν
από τους τρόπους παρακάτω:

Αν θες να πάρεις όλα τα filenames από την λίστα σου απλά κάνε αυτό:
for filename in filenames_list:
    print(filename)

Ή
for i in range( len(filenames_list) ):
    print( filenames_list[i] )

Σου τα εμφανίζει τώρα σωστά με ελληνικά;
Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4227

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Danee έγραψε:
Όταν κάνω print(filenames_list[0]) μου τυπώνει ελληνικά.
Όταν κάνω print(filenames_list) μου τυπώνει αυτό
'\xce\xb5\xce\xb3\xce\xb3\xcf\x81\xce\xb1\xcf\x86\xce\xbf1.doc'
Μάλλον τυπώνει
['\xce\xb5\xce\xb3\xce\xb3\xcf\x81\xce\xb1\xcf\x86\xce\xbf12.doc']
δηλαδή μία λίστα, με ένα στοιχείο, το οποίο είναι encoded σε UTF-8.
ΟΚ. Σωστά τυπώνει.
Ή μήπως όντως τυπώνει '\xce\xb5\xce\xb3\xce\xb3\xcf\x81\xce\xb1\xcf\x86\xce\xbf1.doc' χωρίς "[" και "]"???
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4228

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Τυπώνεται αυτή η λιστα:

Στην προκειμένη έχει ένα αρχείο μέσα, ένα filename δλδ. Η λίστα μου είναι σαν αυτή που εναποθέτεις πιο πάνω(δηλαδή θα έπρεπε να είναι):


Θα δοκιμάσω μήπως μέσα στο template τρέξω τη for και γίνει κάτι. Αν και νομίζω το έχω κάνει, αλλά τώρα το κεφάλι μου είναι καζάνι.
May the code be with you always!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4229

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Για κάποιο λόγο δεν βλέπω κάποια πράματα που έγραψες, βλέπω άσπρα κενά.

Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decode-encode string σε ελληνικα 7 Χρόνια 9 Μήνες πριν #4230

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Δεν ξέρω αν βοηθήσει αλλά δες λίγο τι encoding έχει ο editor που γράφεις. Ο Editor και η consola θα πρέπει να έχουν το ίδιο encoding.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
  • Σελίδα:
  • 1
  • 2
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.491 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου