Αντιστοιχία κωδικοποίησης (windows-1253 και UTF-8 )

...συζητήσεις περί τεχνολογίας για hardware, software, υπηρεσίες, κλπ (για ubuntu ... στο Γενικά)

Συντονιστές: Geochr, ubuderix

Αντιστοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό joe iwannou » 31 Οκτ 2012, 22:24

α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ ς τ υ φ χ ψ ω ( ..... UTF-8 ..... )
á â ã ä å æ ç è é ê ë ì í î ï ð ñ ó ò ô õ ö ÷ ø ù (..... windows-1253.....)

ά έ ί ό ύ ή ( ..... UTF-8 ..... )
Ü Ý ß ü ý Þ (..... windows-1253.....)

Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω ( ..... UTF-8 ..... )
Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ó Ô Õ Ö × Ø Ù (..... windows-1253.....)

Νομίζω ότι με ένα μικρο script μπορεί να γίνεται εύκολα η μετατροπή.
Τελευταία επεξεργασία από joe iwannou και 01 Νοέμ 2012, 20:35, έχει επεξεργασθεί 1 φορά/ες συνολικά
Spoiler: show
1 Γνώσεις Linux: ⅜ Προγραμματισμού: ‱ ┃ Αγγλικών: ⅜
Desktop
Ubuntu-Mate 20.04
Intel Core i3-4150 CPU @ 3.50GHz ‖ RAM 7,5 GB ‖ ASRock H81M-DGS R2.0
Intel Device [8086:041e] {i915}
eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 0c)
Άβαταρ μέλους
joe iwannou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1179
Εγγραφή: 25 Απρ 2010, 04:54
Τοποθεσία: Πες με τι δεν καταλαβαινεις
Εκτύπωση

Re: Αντισοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό lucinos » 31 Οκτ 2012, 22:37

Ή μπορείς απλά να χρησιμοποιήσεις την εντολή iconv
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Αντισοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό lucinos » 01 Νοέμ 2012, 04:01

Παιδιά ξέρει κανείς πώς $%@##@#%%^&$% παίρνουμε τις σειρές χαρακτήρων σαν απλές συμβολοσειρές; κάποιον λίγο λογικό τρόπο γιατί κοιτάξτε τι έκανα:
στην python έδωσα τις εντολές:
Κώδικας: Επιλογή όλων

hex = '0123456789ABCDEF'
for i in hex:
for j in hex:
print '"' + '\\x' + i + j + '",',


και το αποτέλεσμα το έκανα κόπυ-πέϊστ για να φτιάξω την λίστα:
Κώδικας: Επιλογή όλων

charset = ["\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x0A", "\x0B", "\x0C", "\x0D", "\x0E", "\x0F", "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", "\x18", "\x19", "\x1A", "\x1B", "\x1C", "\x1D", "\x1E", "\x1F", "\x20", "\x21", "\x22", "\x23", "\x24", "\x25", "\x26", "\x27", "\x28", "\x29", "\x2A", "\x2B", "\x2C", "\x2D", "\x2E", "\x2F", "\x30", "\x31", "\x32", "\x33", "\x34", "\x35", "\x36", "\x37", "\x38", "\x39", "\x3A", "\x3B", "\x3C", "\x3D", "\x3E", "\x3F", "\x40", "\x41", "\x42", "\x43", "\x44", "\x45", "\x46", "\x47", "\x48", "\x49", "\x4A", "\x4B", "\x4C", "\x4D", "\x4E", "\x4F", "\x50", "\x51", "\x52", "\x53", "\x54", "\x55", "\x56", "\x57", "\x58", "\x59", "\x5A", "\x5B", "\x5C", "\x5D", "\x5E", "\x5F", "\x60", "\x61", "\x62", "\x63", "\x64", "\x65", "\x66", "\x67", "\x68", "\x69", "\x6A", "\x6B", "\x6C", "\x6D", "\x6E", "\x6F", "\x70", "\x71", "\x72", "\x73", "\x74", "\x75", "\x76", "\x77", "\x78", "\x79", "\x7A", "\x7B", "\x7C", "\x7D", "\x7E", "\x7F", "\x80", "\x81", "\x82", "\x83", "\x84", "\x85", "\x86", "\x87", "\x88", "\x89", "\x8A", "\x8B", "\x8C", "\x8D", "\x8E", "\x8F", "\x90", "\x91", "\x92", "\x93", "\x94", "\x95", "\x96", "\x97", "\x98", "\x99", "\x9A", "\x9B", "\x9C", "\x9D", "\x9E", "\x9F", "\xA0", "\xA1", "\xA2", "\xA3", "\xA4", "\xA5", "\xA6", "\xA7", "\xA8", "\xA9", "\xAA", "\xAB", "\xAC", "\xAD", "\xAE", "\xAF", "\xB0", "\xB1", "\xB2", "\xB3", "\xB4", "\xB5", "\xB6", "\xB7", "\xB8", "\xB9", "\xBA", "\xBB", "\xBC", "\xBD", "\xBE", "\xBF", "\xC0", "\xC1", "\xC2", "\xC3", "\xC4", "\xC5", "\xC6", "\xC7", "\xC8", "\xC9", "\xCA", "\xCB", "\xCC", "\xCD", "\xCE", "\xCF", "\xD0", "\xD1", "\xD2", "\xD3", "\xD4", "\xD5", "\xD6", "\xD7", "\xD8", "\xD9", "\xDA", "\xDB", "\xDC", "\xDD", "\xDE", "\xDF", "\xE0", "\xE1", "\xE2", "\xE3", "\xE4", "\xE5", "\xE6", "\xE7", "\xE8", "\xE9", "\xEA", "\xEB", "\xEC", "\xED", "\xEE", "\xEF", "\xF0", "\xF1", "\xF2", "\xF3", "\xF4", "\xF5", "\xF6", "\xF7", "\xF8", "\xF9", "\xFA", "\xFB", "\xFC", "\xFD", "\xFE", "\xFF"]


οπότε τώρα με:
Κώδικας: Επιλογή όλων

iso = ''
for i in charset: iso = iso + i

print iso[161:].decode("iso-8859-1")

παίρνουμε επιτέλους την σειρά:
Κώδικας: Επιλογή όλων
¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ


ομοίως για το iso-8859-7 και την σειρά:
Κώδικας: Επιλογή όλων
‘’£€₯¦§¨©ͺ«¬­?―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ?

αφού όμως πρώτα αντικατέστησα τα '\xae', '\xd2', '\xff' με '?' καθώς για κάποιον μυστήριο λόγο πετάνε σφάλματα

Επειδή μάλλον στο θέμα παρά είμαι άσχετος και ανίκανος, πριν τρελλαθώ τελείως, ας μού πει κάποιος ποιος είναι ο σωστός τρόπος να βγάλω αυτά τα αποτελέσματα
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Αντισοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό lucinos » 01 Νοέμ 2012, 04:31

αυτές τις συμβολοσειρές τις ήθελα για το ακόλουθο πρόγραμμα:

Κώδικας: Επιλογή όλων

#! /usr/bin/python3
#shift.py

iso1 = "¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
iso7 = "‘’£€₯¦§¨©ͺ«¬­?―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ?"

my_dict = dict(zip(iso1, iso7) )

while True:
try:
input_line = input()
except EOFError:
break

line = ''
for i in input_line:
if i in my_dict:
line = line + my_dict[i]
else:
line = line + i

print(line)



Αυτό κάνει την μετατροπή τών λάθος συμβόλων στα σωστά. (είναι όμως απλή αλλαγή συμβόλων, όχι αλλαγή κωδικοποίησης που υποθέτω unicode)

μπορεί να χρησιμοποιηθεί με εντολές όπως:
Κώδικας: Επιλογή όλων

./shift.py < input.txt > output.txt
Τελευταία επεξεργασία από lucinos και 01 Νοέμ 2012, 21:37, έχει επεξεργασθεί 2 φορά/ες συνολικά
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Αντισοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό pmav99 » 01 Νοέμ 2012, 05:46

Συγγνώμη αλλά ποιος ο σκοπός του script? Τι θέλετε να κάνετε?
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Αντισοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό lucinos » 01 Νοέμ 2012, 18:49

pmav99 έγραψε:Συγγνώμη αλλά ποιος ο σκοπός του script? Τι θέλετε να κάνετε?


προσωπικά δεν έχω ιδέα! Απλά μιας και το έφερε η κουβέντα σκέφτηκα να δω πώς θα ήταν ένα σενάριο αντικατάστασης συμβόλων. Και το πρόβλημά μου ήταν ότι κόλλησα σε ένα σημείο που δεν περίμενα.

Πάντως βρήκα μια κάπως λογικότερη λύση (που δεν χρειάζεται κόπυ-πέϊστ) καθώς θυμήθηκα τα bytes τής python3 που τα είχα ξεχάσει εντελώς.
Οπότε στην python3:
Κώδικας: Επιλογή όλων

a = 'ABCDEF'
b = '0123456789ABCDEF'
for x in [i+j for i in a for j in b]:
try: print( bytes.fromhex(x).decode('iso-8859-7'), end = '')
except UnicodeDecodeError: print('?', end = '')


που βγάζει αποτέλεσμα:
Κώδικας: Επιλογή όλων
 ‘’£€₯¦§¨©ͺ«¬­?―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ?

και ομοίως για 'iso-8859-1' έχουμε:
Κώδικας: Επιλογή όλων
 ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

και ομοίως για 'windows-1253' έχουμε:
Κώδικας: Επιλογή όλων
 ΅Ά£¤¥¦§¨©?«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ?


κάπως καλύτερα.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Αντισοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό joe iwannou » 01 Νοέμ 2012, 20:30

lucinos έγραψε:αυτές τις συμβολοσειρές τις ήθελα για το ακόλουθο πρόγραμμα:

Κώδικας: Επιλογή όλων

#! /usr/bin/python3
#shift.py

iso1 = "¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
iso7 = "‘’£€₯¦§¨©ͺ«¬­?―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ?"

my_dict = dict(zip(iso1, iso2) )

while True:
try:
input_line = input()
except EOFError:
break

line = ''
for i in input_line:
if i in my_dict:
line = line + my_dict[i]
else:
line = line + i

print(line)



Αυτό κάνει την μετατροπή τών λάθος συμβόλων στα σωστά. (είναι όμως απλή αλλαγή συμβόλων, όχι αλλαγή κωδικοποίησης που υποθέτω unicode)

μπορεί να χρησιμοποιηθεί με εντολές όπως:
Κώδικας: Επιλογή όλων

./shift.py < input.txt > output.txt

Αυτό ακριβώς ήθελα!!! lucinos :bow:
Το αρχείο shift.py δεν μπορεί να μετατραπεί ώστε να δέχεται κείμενο και να το μετατρέπει ;
Spoiler: show
1 Γνώσεις Linux: ⅜ Προγραμματισμού: ‱ ┃ Αγγλικών: ⅜
Desktop
Ubuntu-Mate 20.04
Intel Core i3-4150 CPU @ 3.50GHz ‖ RAM 7,5 GB ‖ ASRock H81M-DGS R2.0
Intel Device [8086:041e] {i915}
eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 0c)
Άβαταρ μέλους
joe iwannou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1179
Εγγραφή: 25 Απρ 2010, 04:54
Τοποθεσία: Πες με τι δεν καταλαβαινεις
Εκτύπωση

Re: Αντιστοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό lucinos » 01 Νοέμ 2012, 20:46

joe iwannou έγραψε:
lucinos έγραψε:αυτές τις συμβολοσειρές τις ήθελα για το ακόλουθο πρόγραμμα:
μπορεί να χρησιμοποιηθεί με εντολές όπως:
Κώδικας: Επιλογή όλων

./shift.py < input.txt > output.txt

Αυτό ακριβώς ήθελα!!! lucinos :bow:
Το αρχείο shift.py δεν μπορεί να μετατραπεί ώστε να δέχεται κείμενο και να το μετατρέπει ;


Δεν έχω καταλάβει τι εννοείς. Με την παραπάνω εντολή που δίνω μπορείς να τού δίνεις ένα input.txt αρχείο κειμένου να παίρνεις ένα output.txt αρχείο κείμενου. Τι διαφορετικό θέλεις από αυτό; Επίσης μπορείς να δώσεις σκέτη την εντολή
Κώδικας: Επιλογή όλων
./shift.py

και να κάνεις κόπυ-πέϊστ το κείμενο πού θέλεις (βγαίνεις με ctrl+D )
και μπορεί να χρησιμοποιηθεί και με άλλους τρόπους.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Αντιστοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό joe iwannou » 01 Νοέμ 2012, 20:54

To shift.py το εχω σωσει στην επιφανεια εργασιας και δινοντας την εντολη που αναφερεις δεν δημιουργει το output.txt με την
"μεταφραση".
Που κανω λαθος ;
Δινοντας σκετο ./shift.py επιστρεφει
έγραψε:bash: ./shift.py: No such file or directory
Spoiler: show
1 Γνώσεις Linux: ⅜ Προγραμματισμού: ‱ ┃ Αγγλικών: ⅜
Desktop
Ubuntu-Mate 20.04
Intel Core i3-4150 CPU @ 3.50GHz ‖ RAM 7,5 GB ‖ ASRock H81M-DGS R2.0
Intel Device [8086:041e] {i915}
eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 0c)
Άβαταρ μέλους
joe iwannou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1179
Εγγραφή: 25 Απρ 2010, 04:54
Τοποθεσία: Πες με τι δεν καταλαβαινεις
Εκτύπωση

Re: Αντιστοιχία κωδικοποίησης (windows-1253 και UTF-8 )

Δημοσίευσηαπό lucinos » 01 Νοέμ 2012, 21:06

Δεν είσαι στον σωστό φάκελο
πήγενε πρώτα στην επιφάνεια εργασίας (πού είπες ότι το έσωσες)
Κώδικας: Επιλογή όλων
cd Desktop

επίσης δώσε δικαιώματα εκτέλεσης:
Κώδικας: Επιλογή όλων
chmod +x ./shift.py
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Επόμενο

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Περί Τεχνολογίας

cron