Toon posts:

[VB6] utf8 encoded mysql table inlezen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi, leecher af, maar gelijk wel met een aardig probleempje:

Ik ben bezig een visual basic 6.0 programma te verbouwen.
Dit programma pakt unicode teksten uit een mysql-tabel. In de kolommen staan vertalingen van deze tekst in meerdere talen.
Jullie raden het al, dit ging allemaal harstikke leuk aangezien de meeste teksten in Latin-1-characters zijn. Maar nu mag ik dit programma aanpassen zodat ook teksten in het Central Europoean, Grieks, Arabisch enzovoorts kunnen worden verwerkt. Nu liep ik in eerste instantie tegen het probleem aan, dat wanneer een tekst via een query binnenkomt, zoals in onderstaande code:
Visual Basic:
1
2
3
4
query = "Select * from qtext where version='3' order by section"
rs.Open query, Database_Connection, adOpenDynamic, adLockPessimistic
while Not rs.EOF
QText = rs.Fields(aIndex).Value


QText iets verkeerds krijgt. Als ik hier een watch op zet dan zie ik dat er bijvoorbeeld de waarde:
"Nyn?­ m?m n?kolik ot?zek k motiv?m Va?ich aktivit, k Va??­ spokojenosti s nimi a k tomu, co o?ek?v?te od budoucnosti." aan wordt toegekend. terwijl dit eigenlijk de Tschechische tekst: "Nyní mám několik otázek k motivům Vašich aktivit, k Vaší spokojenosti s nimi a k tomu, co očekáváte od budoucnosti." behoort te zijn.

Op het eerste gezicht lijkt het er wel op dat de text goed binnenkomt, maar dat de VB-editor er niet zoveel mee kan. Dit is het echter niet, als ik de bitwaarde van de karakters die als vraagteken worden getoond bekijk dan zijn het ook echt vraagtekens.
Na enig gegoogle, bedenk ik me dat wellicht de data, wellicht al Latin-vervormd als respons op de query bij het VB-programmaatje binnenkomt. Om te forceren dat er echt utf-8 encoded text binnenkomt voeg ik volgende code toe:

Visual Basic:
1
2
3
 
query = "set names utf8"
 rs.Open query, Database_Connection, adOpenDynamic, adLockPessimistic


Dit heeft niet het gewenste maar wel 'n effect. De eerder genoemde zin komt dan binnen als:
""Nyní mám několik otázek k motivům Vašich aktivit, k Vaší spokojenosti s nimi a k tomu, co očekáváte od budoucnosti."
Al die captal A's komen bekend voor van het bekijken van een webpagina in Western Eurpopean die Unicode was.
Deze keer is het weer niet de VB-editor, want als ik de byte-waarde van de characters bekijk, dan blijkt dat de QText-string al de letter voor letter bovenstaande vertaaltekst heeft overgenomen.

In het kort: ik zit nu vast. Moet ik nog gaan sleutelen aan de query/instellingen, database? Is het probleem gewoon het hopeloos ouderwetse VB6? Vast wel, maar ik zal er toch iets voor moeten verzinnen. Hoe haal ik op een goede manier deze utf-8 encoded tekst binnen?

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 22:11

DizzyWeb

Ondertiteld

Is de betreffende tabel UTF-8? En de tekst die je er in gezet hebt, was die ook UTF-8?

Verwijderd

Topicstarter
Ja. Via een php-pagina kun je de vertalingen invoeren, en daar staan gebroederlijk de griekse, tsjechische, arabische, hebreeuwse, russische en nog 15 varianten naast elkaar. Wat dat betreft maak ik me geen zorgen.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

Je zou de output van je mySQL eerst in een adodb stream kunnen gooien.
Voorbeeld in [rml][ ASP/JScript] Probleem converteren euroteken[/rml]

Met dank aan j_du_pee, voor het introduceren van die functie.

Voorbeeld in dat topic is weliswaar een webrequest, maar de functie convertCharset zou je probleem op kunnen lossen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Thnx,

Heb je toevallig nog een suggestie hoe ik het binary result van een mysql query in VB te pakken krijg? Oftewel wat moet ik mee geven als eerste variabele?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:35

TeeDee

CQB 241

code:
1
Qtext = convertCharset(rs.Fields(aIndex).Value, "UTF8") // of "ISO-8859-15"

Zoiets?

[ Voor 20% gewijzigd door TeeDee op 13-10-2005 16:19 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Nee, dat had ik al geprobeerd. Dan knalt ie er uit in de functie op

BinaryStream.Write binSafeArray

omdat het de variabele binSafeArray niet kan worden geschreven omdat het type fout is.

Verwijderd

Topicstarter
De vreemdste dingen gebeuren hier. Op de pc van mijn collega draait dit programma wel naar behoren.

Dan lijkt me er programma-technisch niets fout te zijn, maar het moet een omgevingsfactor zijn. Ik kan theoretisch de volgende oorzaken bedenken:
- odbc-versies
- besturingssysteem taalinstellingen
- database instellingen

Nog richtingen die ik zou kunnen uitpluizen?
Pagina: 1