web server a kódování češtiny

Odpovědět
PetrB
Příspěvky: 141
Registrován: 20 čer 2018, 13:39
Reputation: 0

web server a kódování češtiny

Příspěvek od PetrB » 22 čer 2020, 01:02

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

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: web server a kódování češtiny

Příspěvek od martinius96 » 22 čer 2020, 01:27

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();

PetrB
Příspěvky: 141
Registrován: 20 čer 2018, 13:39
Reputation: 0

Re: web server a kódování češtiny

Příspěvek od PetrB » 22 čer 2020, 09:53

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

PetrB
Příspěvky: 141
Registrován: 20 čer 2018, 13:39
Reputation: 0

Re: web server a kódování češtiny

Příspěvek od PetrB » 23 čer 2020, 01:30

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

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: web server a kódování češtiny

Příspěvek od Kony » 23 čer 2020, 10:43

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í

PetrB
Příspěvky: 141
Registrován: 20 čer 2018, 13:39
Reputation: 0

Re: web server a kódování češtiny

Příspěvek od PetrB » 23 čer 2020, 11:20

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.

PetrB
Příspěvky: 141
Registrován: 20 čer 2018, 13:39
Reputation: 0

Re: web server a kódování češtiny

Příspěvek od PetrB » 23 čer 2020, 13:35

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.

PetrB
Příspěvky: 141
Registrován: 20 čer 2018, 13:39
Reputation: 0

Re: web server a kódování češtiny

Příspěvek od PetrB » 23 čer 2020, 13:40

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti