Dobrý den, mám takový problém: když se snažím načíst hodnotu proměnné typu STRING pomoci TecoApi, tak hodnota se mi sice načte, ale místo české diakritiky vidím otázníky (vypadá že neumí to kódování Windows-1250). Zkoušel jsem to na CP-2000 (FW 3.2). Má to nějaké řešení?
Odpovědi 6
TecoApi zveřejňuje proměnné typu STRING
ve stejném formátu v jakém jsou zadané v programu PLC. Pokud protistrana vyžaduje jiné kódování (typicky UTF-8) je potřeba STRING
v tomto kódování zapsat i v uživatelském programu.
Pro konverzi kódování je možné použít funkce CP1250_TO_UTF8, CP1251_TO_UTF8, …
z knihovny ConvertLib
Pokud by se jednalo o vícejazyčné texty je možné pro jejich zadávání a správu použít nástroj LangMan.
Dobrý den, pišete:
TecoApi zveřejňuje proměnné typu STRING
ve stejném formátu v jakém jsou zadané v programu PLC
V tom případě, jak nastavím Mosaic tak, aby použival UTF-8 defoltně pro všechny stringy?
Rozumím. V tom případě nevíte jestli by to šlo vyřešit na stráně žadatele (v mém případě webová stránka) ?
Zkoušel jsem přidat do hlavičky HTML souboru, kde chi zobrazit výsledek dotazu na TecoApi, řádek <meta charset="windows-1250"> nebo přidat hlavičku Content-type: application/json; charset=windows-1250 přímo do GET dotazu ale výsledek je stejný.
Záleží jak webová stránka data získává. Pokud je použitá metoda fetch
je možné použít následující konverzi:
result = await fetch(apiUrl)
.then(res => res.arrayBuffer())
.then(arrayBuffer => {const myDecoder = new TextDecoder('windows-1250'); return myDecoder.decode(arrayBuffer).toString()})
.then(converted => JSON.parse(converted));
Pokud bude v apiUrl
adresa TecoApi, pak v proměnné result
bude pak struktura, která obsahuje správně kódované stringy.
Děkuji. Budu zkoušet.
Tento dotaz je vyřešený.