печально быть антисоциальным - pitons un kodējumi

Aug. 18th, 2006

01:25 am - pitons un kodējumi

Previous Entry Add to Memories Tell A Friend Next Entry

#dots unikodes objekts, kurā ir teksts latviešu valodā
u=u'funkcion\xc4\x93jo\xc5\xa1s'
s = eval(str(`u`[1:]))
#bet smuks viņš ir tikai augstākminētām pēc mahinācijām.
file('c:/x.html','w').write(s)


kur es kļūdos, ko es nesaprotu?

nāk ārā šamais no xml-rpc servera, kas rakstīts php un domājams grūž to utf-8 kodējumā.

(5 comments | Leave a comment)

Comments:

From:[info]bubu
Date:August 18th, 2006 - 09:27 am
(Link)
u=unicode('funkcion\xc4\x93jo\xc5\xa1s'.decode('utf-8'))
file('c:/x.html','w').write(u.encode('utf-8'))
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:August 18th, 2006 - 09:59 am
(Link)
tur jau tas joks, ka nav dots 'funkcion\xc4\x93jo\xc5\xa1s', bet u'funkcion\xc4\x93jo\xc5\xa1s'.
(Reply to this) (Parent)
[User Picture]
From:[info]cu
Date:August 18th, 2006 - 11:27 am
(Link)
operējot ar parastajiem stringiem, kuros iekšā utf8 saturs, katrs ķeburs aizņēma 2 vai vairāk baitus. Un, ar rokām operējot ar stringu, varēja katram atsevišķajam baitam tikt klāt.
unicode stringos katrs ķeburs tiešām mums *izskatās* kā viens simbols. Piem, "ā" - u'\u0101' ir viens unicode stringa simbols, kaut utf8 kodējumā tie būtu divi.
Nu lūk, rādās, ka ar \x... escape sekvencēm un latviešu burtiem ir problēmas -

Unicode literals can also use the same escape sequences as 8-bit strings, including \x, but \x only takes two hex digits so it can't express an arbitrary code point. Octal escapes can go up to U+01ff, which is octal 777.

Sanāk, ka pieraksts u'\xc4\x93' apzīmē divus kaut kādus unicode simbolus nevis vienu - "ā", un tāpēc arī "print u'\xc4\x93'" izdod kaut kādu ķeburu ne "ā".

Nu un tālāk skaidrs - tu dabū to unikodes stringu tajā \x... pierakstā, un iemāni pitonam kā parastu ne-unikodes stringu, kurā \xc4\x93 ir divi simboli, un no kura var ieenkodēt kā vajag.

Laikam.
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:August 18th, 2006 - 11:32 am
(Link)
ir kāda ideja, kur ir problēma? xmlrpc jau pēc noklusēšanas lieto utf-8.
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]cu
Date:August 18th, 2006 - 11:43 am
(Link)
droši vien tas php sūta utf8. Nu tad viņu varētu ņemt pretī kā parastu ascii un tad taisīt decode('utf-8'), ja vajadzīgs utf8 strings.
Skatījos, ja lieto xmlrpclib Server klasi, tad tai var norādīt encoding - nu, var pamēģināt ascii vai utf-8, redz, kas notiek.
(Reply to this) (Parent)