Fórum Root.cz
Ostatní => Odkladiště => Téma založeno: Dixx 01. 08. 2024, 12:05:43
-
Už delší dobu mi linuxmint nabízí pro aktualizaci pouze americké servery. Dnes jsem to zkoumal, a zjistil, že pro určení polohy využívá službu na adrese http://geoip.ubuntu.com/lookup , která ale v mém případě zkolabuje, takže linuxmint pak nabídne jen výchozí mirrory. Chybové hlášení (viz dole) značí, že někde v názvu města, lokace, nebo možná i poskytovatele internetu se objevilo písmeno u'\u0159' ("ř") , se kterým užovka nepočítá. Nevíte, kde to mám hlásit? Reprodukovat chybu bude pro američana asi obtížné, to by se musel vypravit někam do Zábřehu, Přerova nebo podobné Řitky.
MOD_PYTHON ERROR
ProcessId: 22743
Interpreter: 'geoip.ubuntu.com'
ServerName: 'geoip.ubuntu.com'
DocumentRoot: '/srv/geoip.ubuntu.com/www'
URI: '/lookup'
Location: '/lookup'
Directory: None
Filename: '/srv/geoip.ubuntu.com/cgi-bin/lookup.py'
PathInfo: ''
Phase: 'PythonHandler'
Handler: 'lookup'
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)
File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1229, in _process_target
result = _execute_target(config, req, object, arg)
File "/usr/lib/python2.7/dist-packages/mod_python/importer.py", line 1128, in _execute_target
result = object(arg)
File "/srv/geoip.ubuntu.com/cgi-bin/lookup.py", line 61, in handler
req.write(ans)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0159' in position 264: ordinal not in range(128)
-
IMO má služba "jen" špatně naprogramovanou podporu UTF8 pro prehistorický python 2.7. Viz např. https://www.azavea.com/blog/2014/03/24/solving-unicode-problems-in-python-2-7/
Mně to hodí chybu znaku \u0148 - ň jako Plzeň :-)
-
Spíše podporu UTF-8 vůbec nemá, resp. failne na čemkoliv non-ASCII: 'ascii' codec can't encode character u'\u0159' in position 264: ordinal not in range(128)
-
IMO je to klasický problém starého pythonu, kde stringy s UTF8 vyžadují jiné zacházení a autoři té služby lookup.py s UTF8 znaky vůbec nepočítali.
-
Jestli jde o "mintsources" (nebo jak se to jmenuje), tak to při selhání geoip použije LANG. Takže tipuju, že ten systém nemáš v češtině, ale můžeš to dočasně nastavit.
LANG=cs_CZ.UTF-8 mintsources
-
Mě to hlásí pro \xe1. A šlo by dát ttřeba geoip.ubuntu.com ma localhost, null route nebo
Přes jiné rozhraní (britské vpn, to je blíž a taky a-z použivaj)
-
To Ř/ř je nějaké zakleté.
Je to asi 14 dní, co jsem řešil problém v jedné starší aplikaci, kde někdo pro kódování použil .Net metodu HttpUtility.HtmlEncode(). Ta sice zakódovala speciální znaky i většinu písmen s diakritikou, ale zrovna Ř/ř nechala v původním stavu. A když jsem hledal, tak jsem žádnou spolehlivější metodu v .Net stejně nenašel (která by kódovala opravdu vše s ASCII >127).
-
To Ř/ř je nějaké zakleté.
Je to asi 14 dní, co jsem řešil problém v jedné starší aplikaci, kde někdo pro kódování použil .Net metodu HttpUtility.HtmlEncode(). Ta sice zakódovala speciální znaky i většinu písmen s diakritikou, ale zrovna Ř/ř nechala v původním stavu. A když jsem hledal, tak jsem žádnou spolehlivější metodu v .Net stejně nenašel (která by kódovala opravdu vše s ASCII >127).
Ř není v HTML řídicí znak. Není tak důvod, aby jej metoda pojmenovaná HtmlEncode jakkoliv ošetřovala.
-
Ř není v HTML řídicí znak. Není tak důvod, aby jej metoda pojmenovaná HtmlEncode jakkoliv ošetřovala.
Třeba Á/á také ne a to je kódované. (Á á)
Ale jak jsem psal, nebylo to mé řešení, jen jsem to spravoval (po 10 letech provozu, kdy to nikomu nevadilo, protože nejspíš všechna ostatní písmena s diakritikou to kódovalo).
-
PokuD se tom chcete vrtat a.přijít na kloub napadá:mě najít si utf8 zápis těchto písmen
Utf-8 má vlastnost robustnosti, znaky 0x0-7F bez omezení, ale 2znakové sekvence utf8 je vždy 0b110xxxxx + 0b10xxxxxx,
3znakové : 0b1110xxxx, 0b10....,0b10...., snad jsem to nepomotal,viz wiki
Porovnejte jestli ř jaký má pattern oproti č,ž,éí... V těch horních bitech, bude k tomu potřeba to původní kódování(iso88,cp1250)