unikod
Jacek Konieczny
jajcus w pld.org.pl
Śro, 31 Gru 2003, 21:15:14 CET
On Wed, Dec 31, 2003 at 05:09:27PM +0100, Andrzej Krzysztofowicz wrote:
> > Mogę spróbować zrobić cały skrypt "validujący" Unicode, tylko napisz co
> > dokładnie powinien on robić.
>
> Sprawdzac, czy plik nie zawiera kombinacji znakow nielegalnych w UTF-8
> (za "nielegalne" moze tez traktowac zakres "user-defined", ale nie jest to
> konieczne), badz nie reprezentujacych zadnego znaku (jeszcze nieprzypisanych).
>
> Chcialbym, zeby wypisal linie zawierajace bledy, dobrze gdyby podal nry
> linii i pozycje nieprawidlowego znaku w kazdej z nich.
Skrypt w załączniku.
> Musi dzialac na zasobach Ra.
Będzie działać (powinien), ale z dwoma ograniczeniami:
python-2.2 (który jest w Ra) ma wkompilowaną starą wersję Unicode Database,
więc może niektórych znaków nie znać (ale nie sądze, żebyś ich
potrzebował). No i w Ra python bysł skompilowany z 16-bitową obsługą
unicode, więc siłą rzeczy kody > 65535 będą uznane za błędne.
Pozdrowienia,
Jacek
-------------- następna część ---------
#!/usr/bin/python
import sys
import unicodedata
if len(sys.argv) not in (2,3):
print "Usage:"
print " %s [encoding] <file>" % (sys.argv[0],)
if len(sys.argv)>2:
encoding=sys.argv[1]
filename=sys.argv[2]
else:
encoding="utf-8"
filename=sys.argv[1]
i=0
f=file(sys.argv[1])
for l in f.xreadlines():
i+=1
try:
ul=unicode(l,encoding,"strict")
except UnicodeError:
ul=unicode(l,encoding,"replace")
print "Unicode error in line %i: %r" % (i,l)
print "at unicode character position: %i" % (ul.find(u'\ufffd'),)
print "Decoded string: %r" % (ul,)
else:
j=0
for c in ul:
if ord(c)<32:
# ignore control characters
continue
try:
unicodedata.name(c)
except ValueError:
print "Unknown character in line %i: %r" % (i,l)
print "at unicode character position: %i" % (j,)
print "Decoded line: %r" % (ul,)
j+=1
f.close()
Więcej informacji o liście dyskusyjnej pld-devel-pl