Stránka 1 z 1
web server a kódování češtiny
Napsal: 22 čer 2020, 01:02
od PetrB
Ahoj,
hraju si s Arduinem mega, které má Ethernet shield a používám knihovny SPI.h a Ethernet.h
Celkem mi to funguje, ale mám problém s češtinou.
Když odešlu v hlavičce toto:
Kód: Vybrat vše
vKlient.println(F("Content-Type: text/html;charset=Windows-1250"));
....
vKlient.print(F("Čas od spuštění: "));
...
vytvoří se stránka, ale namísto textu "Čas od spuštění : " tam vidím "ďż˝as od spuďż˝tďż˝nďż˝: " v hexa to je
0F01 7C01 DD02 6100 7300 2000 6F00 6400 2000 7300 7000 7500 0F01 7C01 DD02 6E00 0F01 7C01 DD02 3A00 2000 3100
Zkusil jsem tam dát utf-8, ale to nebylo o moc lepší.
Nevíte, co se má nastavit (a jak) aby to umělo česky?
Díky
Pb
Re: web server a kódování češtiny
Napsal: 22 čer 2020, 01:27
od martinius96
Daj to utf-8 do meta tagu v hlavičke HTML stránky. UTF-8 mi funguje na slovenskú diakritiku na stránke.
Príklad:
Kód: Vybrat vše
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println();
client.println(F("<!DOCTYPE html>"));
client.println(F("<html>"));
client.println(F("<head>"));
client.println(F("<meta charset='utf-8'>"));
client.println(F("<title>HTTP webserver - Arduino + Ethernet</title>"));
client.println(F("</head>"));
client.println(F("<body>"));
.
.
.
client.println(F("</body>"));
client.println(F("</html>"));
delay(1);
client.stop();
client.flush();
Re: web server a kódování češtiny
Napsal: 22 čer 2020, 09:53
od PetrB
Ahoj,
díky za reakci.
To jsem v rámci pokusů také zkoušel.
Nemůže na to mít vliv, že používám místo klasického Arduino prostředí Visual Studio? Zdrojové soubory mám v Win-1250, ale jak se to potom při překladu "převrtí" vůbec netuším. Podle těch hexa kódů to přeloží do Unicode ovšem nějak zvláštně.
Pb
Re: web server a kódování češtiny
Napsal: 23 čer 2020, 01:30
od PetrB
Ahoj,
tak jsem to trochu poupravil a stránka má tento zdrojový kód
Kód: Vybrat vše
<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
<div>
Index page</div>
<div>
�as od spu�t�n�: 14.00 s</div>
</body>
</html>
já tam ovšem pouštím pKlient.print(F("Čas od spuštění: "));
Takže fakt netuším.
A když si to místo do klienta pošlu na "Seriál", tak vidím v podstatě to samé:
Kód: Vybrat vše
HTTP/1.1 200 OK Content-Type: text/html Connection: close
Refresh: 5
<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
<div>
Index page</div>
<div>
�as od spu�t�n�: 18.00 s</div>
</body>
</html>
Zkusil jsem také udělat Serial.println('Č', HEX); a napsalo mi to FFFFFFC8
Můžete někdo zkusit, co to napíše vám za hexa kód?
Díky
Re: web server a kódování češtiny
Napsal: 23 čer 2020, 10:43
od Kony
Problem je ten ze mas zdrojáky v jiném kódování....
Přetáhni ty zdrojáky přes PSPPad a tam změň kódování
Re: web server a kódování češtiny
Napsal: 23 čer 2020, 11:20
od PetrB
Taky jsem si to myslel. Ale když se podívám na hexa podobu toho zdrojáku, tak je tam Č a 0xC8 což je správně. Když to pošlu na stránku, zobrazí se mi něco divného (jako unicode, je to 2B). Ovšem když jsem si nechal vypsat ASCII tabulku (prostě čísla 32-255 jako znaky), tak mi to napíše korektně Č. Skoro to vypadá, jako kdyby se v rámci Stringu prováděl nějaký převod mezi znakovými sadami.
Re: web server a kódování češtiny
Napsal: 23 čer 2020, 13:35
od PetrB
Změnil jsem obsah ino souboru tak, aby už nebyl Unicode. Takže teď je v něm pro Č kód 0xc8, ale stále se mi to zobrazuje stejně. Vypnul jsem i ukládání souborů ve Visual Studiu jako UTF.
Nevíte, jestli pod tím Visual studiem není ještě nějaká volba "překládej program do Unicode?
Mám následující kód, který mi generuje ASCII tabulku:
Kód: Vybrat vše
int j = 0;
int k = 2;
for (int i = 32; i < 256; i++) {
if (j == 0) {
pisZ(tagTr);
pis(tagTd, ttsOpenClose, String(k, HEX));
}
pisZ(tagTd);
pisS(i);
pisS(F(" = '"));
char a = i;
String s = String(a);
pisS(a);
pisS(s);
s = F("Č");
pisS(s[0]);
pisS(' ');
pisS(String(s[0], HEX));
pisS(F("'"));
pisK(tagTd);
j++;
if (j == 16) {
pisK(tagTr);
j = 0;
k++;
}
}
pis nedělá nic jiného,než pKlient.print.
Pro číslo 200 (0xc8) mi to zobrazí 200 = 'ČČď ffef' - což znamená: v pořádku, přes ASCII, v pořádku přes ASCII a string, to má být 'Č' a to je ASCII kód toho Č. grrr.
Ach jo.
Re: web server a kódování češtiny
Napsal: 23 čer 2020, 13:40
od PetrB
To mě "po..." s odpuštěním. Tak už jsem to našel.
Dělá to Visual Micro. Dokonce se k tomu přiznává, že ne-americké znaky překládá na nesmyslné. Zdroják musí být uložený v Unicode 65001 a pak to funguje i česky.
viz
https://www.visualmicro.com/page/User-G ... ASCII.html
To je "výhoda" black boxů třetích strach. Ach jo.
Díky za vaše komentáře.