Forum » Programiranje » [MariaDB] Kako izpisati stringe, ki imajo posebne "škatlica" znake?
[MariaDB] Kako izpisati stringe, ki imajo posebne "škatlica" znake?

HotBurek ::
Dobro jutro.
Evo, fanjte in delkine, nov dan, nov izziv.
Zanima me, kako v SQL-u (MariaDB) izpisat string-e, ki imajo posebne "pokvarjene" znake (dva primera spodaj v sliki, spet te škatlice...)?
Če se prav spomnem, sem nekaj let nazaj že spraševal podobno/isto zadevo, a nisem našel. Če se prav spomnim, se naredi compare, kjer se string converta v "zapisljive črke/znake" in pol preverja z originalom, če je isti. Neki takega.
Zadevo bi mogoče, če bo šlo, že ob vnosu poizkusil popravit.
Druga stvar pa je, da če poženem python skripto in te vrednosti izpisujem z "print();" na output, se zgodi, da ko pride do tega stringa, se izpis output-a zakluči/obstane. Kar je moteče. Ne vem pa, če taka skripta v ozadju dela naprej. Nisem preveril.
UPDATE
Poizkusil sem tole:
Ampak ne dela pravilno, ker npr. najde: Patè di pesce spada
To ni to.
Evo, fanjte in delkine, nov dan, nov izziv.
Zanima me, kako v SQL-u (MariaDB) izpisat string-e, ki imajo posebne "pokvarjene" znake (dva primera spodaj v sliki, spet te škatlice...)?
Če se prav spomnem, sem nekaj let nazaj že spraševal podobno/isto zadevo, a nisem našel. Če se prav spomnim, se naredi compare, kjer se string converta v "zapisljive črke/znake" in pol preverja z originalom, če je isti. Neki takega.
Zadevo bi mogoče, če bo šlo, že ob vnosu poizkusil popravit.
Druga stvar pa je, da če poženem python skripto in te vrednosti izpisujem z "print();" na output, se zgodi, da ko pride do tega stringa, se izpis output-a zakluči/obstane. Kar je moteče. Ne vem pa, če taka skripta v ozadju dela naprej. Nisem preveril.
UPDATE
Poizkusil sem tole:
LENGTH(`name`) AS 'length', CHAR_LENGTH(`name`) AS 'char_length'
Ampak ne dela pravilno, ker npr. najde: Patè di pesce spada
To ni to.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
- spremenilo: HotBurek ()

HotBurek ::
UPDATE
Zdej sem že bližje.
Če poženem tole:
Dobim:
Zdej sem že bližje.
Če poženem tole:
CONVERT(`name` USING 'ascii')
Dobim:
Cannot convert 'utf8mb4' character 0xC29D to 'ascii' Cannot convert 'utf8mb4' character 0xC29D to 'ascii' Cannot convert 'utf8mb4' character 0xC383 to 'ascii' Cannot convert 'utf8mb4' character 0xC383 to 'ascii'
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()

HotBurek ::
Tule je primer strani s takim stringom:
https://motorsport-tools.com/catalog/pr...
V brskalniku lepo pokaže ime: Simpson Escort Mk1 Mk2 Stainless Steel Exhaust System 1 Box - 2.75 ? Universal
Gre se za tist velik "A z vijugasto črto" na koncu (slo-tech ga je konvertal v znak za vpraša).
Sem šel pa gledat v html source, kjer je vnešen takole: \u00c3\u0098
https://motorsport-tools.com/catalog/pr...
V brskalniku lepo pokaže ime: Simpson Escort Mk1 Mk2 Stainless Steel Exhaust System 1 Box - 2.75 ? Universal
Gre se za tist velik "A z vijugasto črto" na koncu (slo-tech ga je konvertal v znak za vpraša).
Sem šel pa gledat v html source, kjer je vnešen takole: \u00c3\u0098
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()

HotBurek ::
Iskanje non-ascii ne bo vredu, ker je polno drugi takih (non-asci) črk in to je vse vredu.
Gre, zaenkrat, za dva primera, kjer mi grafični vmesnik izpiše/prikaže škatlice (kot je prikazano zgoraj v sliki).
Za prvi primer je product že offline, za drugi primer pa sem našel in je še online (link v zgornjem postu).
Gre, zaenkrat, za dva primera, kjer mi grafični vmesnik izpiše/prikaže škatlice (kot je prikazano zgoraj v sliki).
Za prvi primer je product že offline, za drugi primer pa sem našel in je še online (link v zgornjem postu).
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()

socialec ::
Samo tukaj sta dva znaka in če te A moti, sta izven ascii območja. Kot enkrat prej, če ti samo PRIKAŽE škatlice, je znak mogoče še vedno legitimen in bi moral primerjati z definicijo glifov v fontu, ali?
Ã
Zbljuz, \u00c3=Ã in \u0098=
Ã
Zbljuz, \u00c3=Ã in \u0098=
Zgodovina sprememb…
- spremenilo: socialec ()

HotBurek ::
Kot rečeno, ne gre za ascii, ker je še polno drugih črk, ki so valid in se pravilno prikažejo...
Problem je, naprimer, da če poženem python skripto in v terminal izpisujem potek, se ob izpisu enega izmed zgoraj (v sliki) omenjenih imen (name), izpisovanje v terminalu ustavi.
Ter to, da bi rad našel še druge take primere.
Sem tule potestiral: https://r12a.github.io/uniview/?charlis...
U+00C3: LATIN CAPITAL LETTER A TILDE (tega lepo prikaže)
U+0098: START OF STRING (to pa prikaže kot SOS škatlico... in ta je verjetno problem)
Oba zapisa spadata v skupino "Latin-1 Supplement".
Zanima me, če tudi vam v tej tabeli (iz spodnje sliki na levi strani) isto prikaže škatlice (XXX, BPH, NGH, itn)?
Ta tabela se odpre s klikom na "Latin-1 Suplement" ki je na desni spodaj (označeno na sliki).
Problem je, naprimer, da če poženem python skripto in v terminal izpisujem potek, se ob izpisu enega izmed zgoraj (v sliki) omenjenih imen (name), izpisovanje v terminalu ustavi.
Ter to, da bi rad našel še druge take primere.
Sem tule potestiral: https://r12a.github.io/uniview/?charlis...
U+00C3: LATIN CAPITAL LETTER A TILDE (tega lepo prikaže)
U+0098: START OF STRING (to pa prikaže kot SOS škatlico... in ta je verjetno problem)
Oba zapisa spadata v skupino "Latin-1 Supplement".
Zanima me, če tudi vam v tej tabeli (iz spodnje sliki na levi strani) isto prikaže škatlice (XXX, BPH, NGH, itn)?
Ta tabela se odpre s klikom na "Latin-1 Suplement" ki je na desni spodaj (označeno na sliki).
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()

socialec ::
Ok, če ti ne bo kdo drug pomagal, si tule sam, čakamo ugotovitve, če morebiti kdaj naletimo na podobne težave.

HotBurek ::
Evo, zadevo sem rešil. Kot pomočnika sem uporabil orodje... ChatGPT.
Problem se imenuje mođibejk: Mojibake @ Wikipedia
Rešitev:
Pravilen izpis: Simpson Escort Mk1 Mk2 Stainless Steel Exhaust System 1 Box - 2.75 Ø Universal
Se pravi, šlo je za črko Ø zapisano kot \u00c3\u0098 oz. \xc3\x83\xc2\x98.
Problem se imenuje mođibejk: Mojibake @ Wikipedia
Rešitev:
try: text = text.encode("latin1").decode("utf-8", errors="replace"); except: pass;
Pravilen izpis: Simpson Escort Mk1 Mk2 Stainless Steel Exhaust System 1 Box - 2.75 Ø Universal
Se pravi, šlo je za črko Ø zapisano kot \u00c3\u0098 oz. \xc3\x83\xc2\x98.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()

socialec ::
Ja nič, to je to, bio je obsolete, tehnični del foruma lahko zaprete, da ne bo jemal resursov inu pozornosti.

Spura ::
Mucke delas z encodingi in pretvajas gor in dol, jasno da bodo problemi.
Tvoj problem je, da html napacno deklarira encoding vcasih. Tuki nimas kaj dosti narest, edino kar lahko popravljas je poskusis stran interpretirat kot UTF-8, UTF-16 in vidis ce bodo kake nepravilne sekvence. Single byte encodingi kot so razni extended ASCII tipi (recimo windows-1250 itd...) niso vedno zaznavni, ker je pri njih vecina bytov valid.
Byte 0xC8 je Č v windows-1250 ampak je tudi v windows-1252 E z backtickom. Torej ce je ta bajt v tekstu in HTML pravi da je UTF-8, bo 0xC8 invalid character. Ampak kateri encoding je? Smola da je to povsem valid v windows-1250, windows-1252, in se kupu ostalih. Teli encodingi imajo sicer ene 5 bytov ki so invalid in ce so v tekstu lahko eliminiras te encodinge kot kandidate. Pac tuki moras imet nek cope.
Potem ko si izbral pristop za to, das to v bazo kot utf-8. In od tam naprej s tem delas kot utf-8 stringi in ga nehas srat z raznimi pretvorbami.
Tvoj problem je, da html napacno deklarira encoding vcasih. Tuki nimas kaj dosti narest, edino kar lahko popravljas je poskusis stran interpretirat kot UTF-8, UTF-16 in vidis ce bodo kake nepravilne sekvence. Single byte encodingi kot so razni extended ASCII tipi (recimo windows-1250 itd...) niso vedno zaznavni, ker je pri njih vecina bytov valid.
Byte 0xC8 je Č v windows-1250 ampak je tudi v windows-1252 E z backtickom. Torej ce je ta bajt v tekstu in HTML pravi da je UTF-8, bo 0xC8 invalid character. Ampak kateri encoding je? Smola da je to povsem valid v windows-1250, windows-1252, in se kupu ostalih. Teli encodingi imajo sicer ene 5 bytov ki so invalid in ce so v tekstu lahko eliminiras te encodinge kot kandidate. Pac tuki moras imet nek cope.
Potem ko si izbral pristop za to, das to v bazo kot utf-8. In od tam naprej s tem delas kot utf-8 stringi in ga nehas srat z raznimi pretvorbami.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [php] encoding nizaOddelek: Izdelava spletišč | 4104 (2019) | BivšiUser2 |
» | [Java] Prevajanje in šumniki v ubuntuOddelek: Programiranje | 2647 (2264) | mmaestro |
» | aspx preberm HTML straniOddelek: Programiranje | 1499 (1363) | Senzacionale |
» | [PHP] charter set windows-1250Oddelek: Programiranje | 2933 (2933) | Blisk |
» | c++ datotekeOddelek: Programiranje | 4171 (3660) | Vesoljc |