Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Linux prebacio 2%

[es] :: Advocacy :: Linux prebacio 2%
(TOP topic, by flighter_022)
Strane: << < .. 141 142 143 144 145 146 147 148 149 150 ... Dalje > >>

[ Pregleda: 340931 | Odgovora: 3052 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Linux prebacio 2%05.11.2020. u 02:53 - pre 41 meseci
Mada mislim da je ovo posledica sto je na Linux-u sve zivo enkodirano u utf8, ima onaj thread gde mozes komplet C/C++ program da pises u cirlici samo opalis #define-ove :P
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Linux prebacio 2%05.11.2020. u 06:33 - pre 41 meseci
Nije ASCII i nema nikakve magije. Jednostavno, to je nula terminirajući char* kodiran kao UTF-8 bez BOM-a.

Fajlsistem dopušta UNICODE. Putanje, koje se navode u open, fopen i exec funkcijama su žnula terminirajući char* kodiran kao UTF-8 bez BOM-a.

Isto važi za argv parametar main funkcije.

Ako ne znaš da li je byte order uvek isti ili zavisi od arhitekture, OK.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Linux prebacio 2%05.11.2020. u 07:26 - pre 41 meseci
Probaj to isto na Windows-u pa kazi to isto...
Sto se tice byte ordera, to mozda samo za wchar_t sizeof(char) je uvek jedan pa tu byte order ne igra nikakvu ulogu...
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Linux prebacio 2%05.11.2020. u 07:32 - pre 41 meseci
Koliko znam, kineski, japanski i korejski jezik imaju uprošćeno slikovno pismo, koje staje u 16 bita, kao i tradicionalno slikovno pismo, koje ne staje u 16 bita. Uprošćena varijanta je usvojena ka službena, a tradicionalna može da se koristi iz fazona.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Linux prebacio 2%05.11.2020. u 08:05 - pre 41 meseci
Mislio sam da li se slovo "Č" uvek beleži kao \xc4\x8c, ili se može beležiti i kao big endian \x8c\xc4. Očigledno nisam bio u pravu, jer se UTF-8 uvek beleži na isti način. Dakle, "Č" je uvek \xc4\x8c.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.isp.telekom.rs.



+2789 Profil

icon Re: Linux prebacio 2%05.11.2020. u 12:16 - pre 41 meseci
Citat:
Branimir Maksimovic: Probaj to isto na Windows-u pa kazi to isto...

Evo: Visual C++ 2019, Windows 10 Home
Code (cpp):

#include <iostream>
#include <cstdio>

using namespace std;

int main(int argc, const char* argv[])
{
    char evro[] = "\xe2\x82\xac\x00";
    char ch[] = "\xc4\x8c\x00";

    for (int i = 1; i < argc; ++i) {
        printf("%d.\t\'%s\'\n", i, argv[i]);
        cout << i << ".\t\'" << argv[i] << "\'" << endl;
    }

    printf("%s\n", evro);
    cout << evro << endl;
    printf("%s\n", ch);
    cout << ch << endl;
    scanf_s("%s", evro);
    printf("%s\n", evro);
    cout << evro << endl;
    cin >> evro;
    printf("%s\n", evro);
    cout << evro << endl;

    return 0;
}
 

Prvo i poslednje "š" su ćirilični, ali ih je ovaj sajt pretabačio u latinicu.

C:\Users\nedeljkos\source\repos\Utf8\x64\Release>Utf8.exe š š
1. '?'
1. '?'
2. 'Ü'
2. 'Ü'
Ôé¼
Ôé¼
─î
─î
š
s
s
š
?
?


Redirekcija izlaza u fajl i njegovo otvaranje u Notepad++ editoru daju nešto bolji rezultat.
Citat:
1. 'š'
1. 'š'
2. '?'
2. '?'


Č
Č
s
s
?
?



Na Linux-u isti kod (samo sa scanf umesto MS-ovov scanf_s) daje ispravan rezultat, kako u terminalu, tako i u fajlu gde je redirektovan izlaz.

Opet, prva dva i poslednja dva 'š' su ćirilična, ali ih je ovaj sajt preslovio u latinicu.

1. 'š'
1. 'š'
2. 'š'
2. 'š'


Č
Č
š
š
š
š


[Ovu poruku je menjao Nedeljko dana 05.11.2020. u 15:07 GMT+1]
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
2a01:c22:900f:1000:4ecc:6aff..



+27 Profil

icon Re: Linux prebacio 2%05.11.2020. u 13:14 - pre 41 meseci
Citat:
Koliko znam, kineski, japanski i korejski jezik imaju uprošćeno slikovno pismo, koje staje u [...]


(Korejsko pismo nije slikovno, već alfabetsko. Samo što se slova slažu na dva nivoa, prvo u slogovne blokove, zatim blokovi linijski. Pošto koncept unikoda pretpostavlja samo linijsko slaganje, onda za korejski mora da kodira znakove ne samo za slova sâma, nego i za sve njihove slogovnoblokovske kombinacije.)
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
...kabel-badenwuerttemberg.de.



+7169 Profil

icon Re: Linux prebacio 2%05.11.2020. u 17:37 - pre 41 meseci
Citat:
Branimir Maksimovic:
Probaj to isto na Windows-u pa kazi to isto...
Sto se tice byte ordera, to mozda samo za wchar_t sizeof(char) je uvek jedan pa tu byte order ne igra nikakvu ulogu...


Citaj da je Microsoft od 2019 krenuo da savetuje UTF-8 zvanicno. Windows 10 je od preview-a iz 2017 imao UTF-8 podrsku kako treba.

Sve sto su trebali da urade je... da izmisle novu kodnu stranu 65001 (postojala je duze vremena u Windows-u, ali samo za neke API-je gde korisnik zna sta radi. Trebalo im je oko 10 godina da ociste sve u OS-u da radi kako treba sa UTF-8) - i da pod tom kodnom stranom ANSI verzije API-ja tretiraju stringove kao UTF-8.

Da su to uradili za Windows 2000, svet bi bio drugaciji :-)

Ali, posto nisu... stvari su malo drugacije:

1. Win32 aplikacije ce jos godinama da se vucaraju sa UTF-16 kodom (od koji boga pitaj koliko njih zaista jesu UTF-16, a ne sa netacnom pretpostavkom da su elementi stringa fiksne sirine od 16-bita i nesto izmedju UCS-2 i UTF-16, gde sam bog zna sta sve moze da se desi)

2. NTFS imena fajlova sa WTF-8 kodiranjem ce verovatno ostati takva duuuugo vremena, kao i API-ji koji sa njima barataju

Za MSFT standarde, ovo je ipak velika stvar, bez obzira na to kako se doslo do nje (i koliko dugo se cekalo).

Mogli su da... ne urade nista :-) Ili da jos vise za*eru :-) 90-tih ni uvodjenje nekog MS-WTF8 ne bi bilo van domasaja.

Time je Windows sada manje-vise ekvivalentan Linux-u, osim sto zbog grehova iz proslosti mora da placa cenu kroz WTF-8 kompatibilne API-je i gomilu cudnog koji deca nece moci da razumeju :)
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Linux prebacio 2%05.11.2020. u 20:30 - pre 41 meseci
Sve jedno probaj ovo na Windows-u:
Code:


#include <string>
#include <iostream>
#include <codecvt>
#include <locale>

std::wstring gToWide(const std::string& aNarrow)
{
     std::wstring_convert<std::codecvt_utf8<wchar_t>> lConverter;
     return lConverter.from_bytes(aNarrow);
}

std::string gToNarrow(const std::wstring aWide)
{
     std::wstring_convert<std::codecvt_utf8<wchar_t>> lConverter;
     return lConverter.to_bytes(aWide);
}

int main(/*int argc, char *argv[]*/)
{
    std::cout.sync_with_stdio(false);
    std::wcout.sync_with_stdio(false);
    std::cout.imbue(std::locale(""));
    std::wcout.imbue(std::locale(""));
     std::string lStr1("zażółć gęślą jaźń");
     std::wstring lStr2(gToWide(lStr1));

     std::cout << "sizeof(wchar_t): " << sizeof(wchar_t) << std::endl;
     std::cout << lStr1 << std::endl;
     std::wcout << lStr2 << std::endl;
     std::cout << gToNarrow(lStr2) << std::endl;
     return EXIT_SUCCESS;
}


na Linux-u dobijam ovo:
Code:

~/.../bmaxa_data/examples >>> ./a.out                                                                                                                                                                      [127]
sizeof(wchar_t): 4
zażółć gęślą jaźń
zażółć gęślą jaźń
zażółć gęślą jaźń

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Linux prebacio 2%06.11.2020. u 01:56 - pre 41 meseci
Do ponedeljka neću imati Windows pri sebi.

Koliko vidim, na Linux-u dobijaš tačno ono što si napisao.

Na Linux-u, dokle god radiš sa std::string i char*, sve je u redu.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Linux prebacio 2%06.11.2020. u 21:47 - pre 41 meseci
Evo rezultat sa Windows-a:

Code:


sizeof(wchar_t): 2
zażółć gęślą jaźń
zażółć gęślą jaźń
zażółć gęślą jaźń

C:\Users\bmaxa\source\repos\ConsoleApplication1\Debug\utf8.exe (process 3088) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .


Interesantna stvar je da mora da se promeni sistem locale da podrzava *beta* utf8 inace program puca sa exceptionom u pokusaju konverzije std::string u std::wstring :)
Jos jedna interesantna svar je da promena locale-ta zahteva *reboot* :))))))
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
2a02:8071:31e1:dd00:c134:29b..



+7169 Profil

icon Re: Linux prebacio 2%06.11.2020. u 23:25 - pre 41 meseci
Debug verzija:



Ignorisite los HDPI render MessageBox-a, ljudi koji su pisali taj kod su odavno otisli iz firme - Microsoft nema pojma kako to da popravi. Eventualno ce preci na Electron (kao MS Teams)...

Linija 9:

Code:

Unhandled exception at 0x75CC9AB2 in ConsoleApplication2.exe: Microsoft C++ exception: std::range_error at memory location 0x00B8F318.


DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
Prikačeni fajlovi
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.gprswap.mts.telekom.rs.



+2789 Profil

icon Re: Linux prebacio 2%07.11.2020. u 00:12 - pre 41 meseci
Nisam imao pojma koliko je Ivan Dimković u pravu oko utf8.

Dakle, MS-ovo rešenje sa WCHAR ne rešava problem, nego ga čak i produbljuje - postojeće greške se ne ispoljavaju.

Drugo, kodne stranice su glupost, jer ne dozvoljavaju mešanje jezika iz različitih jezičkih grupa u istom tekstu, a takođe ih ima dosta, pa moramo imati informaciju o to tome koja je kodna stranica korišćena.

Treće, UTF-8 je

1. jedinstven za sve jezike na svetu,

2. ASCII kompatibilan,

3. Traženje podstringa u stringu je jednostavno - bajt po bajt. Nema potrebe da se vodi računa o tome gde neki znak počinje, jer bajt nije početni u zapisu nekog znaka ako i samo ako su mu najviša dva bita 10. Dakle, ako imam niz bajtova koji predstavlja podstring koji tražim, prvi bajt u tom nizu ne može imati vodeća dva bita jednaka 10, pa kad bude pronađen odgovarajući podniz bajtova, to će zaista biti odgovarajući podstring.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Linux prebacio 2%07.11.2020. u 00:29 - pre 41 meseci
Citat:
Ivan Dimkovic:
Debug verzija:



Ignorisite los HDPI render MessageBox-a, ljudi koji su pisali taj kod su odavno otisli iz firme - Microsoft nema pojma kako to da popravi. Eventualno ce preci na Electron (kao MS Teams)...

Linija 9:

Code:

Unhandled exception at 0x75CC9AB2 in ConsoleApplication2.exe: Microsoft C++ exception: std::range_error at memory location 0x00B8F318.



Sreca mozes da promenis da podrzava utf8 u izboru lokala ima mali check box (Windows 10), da izaberes utf 8 podrsku i pise beta...
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
2a02:8071:31e1:dd00:c134:29b..



+7169 Profil

icon Re: Linux prebacio 2%07.11.2020. u 01:01 - pre 41 meseci
Sreca?

Sumnjam. Pazi kad sam Microsoft to zove beta, ne pada mi na pamet da aktiviram to, ovo mi je radna masina. What could possibly go wrong? :-)

Posto sam old fart, vec vidim problem :-) Ocigledno niko u MSFT-u jos ne moze da garantuje da kodna baza 100% radi sa utf-8... u tom slucaju cu radije ziveti u starom losem svetu "teoretskog UTF-16" + WTF-8, nego da budem opitni primerak za Microsoft-ov spor prelaz na utf-8. Za*eb ti to.

Citat:
Nedeljko
Nisam imao pojma koliko je Ivan Dimković u pravu oko utf8.

Dakle, MS-ovo rešenje sa WCHAR ne rešava problem, nego ga čak i produbljuje - postojeće greške se ne ispoljavaju.


Pazi, Nedeljko - evo ti jedan primer zasto je to tako. Mislim ceo MSFT nikad nije bio nesto preterano dobar u API dizajnu (cast izuzetcima poput originalnog NTOS tima), ali cak i TO je bukvalno nedodirljivo za danasnje pojmove :(

Uzmi jednu modernu aplikaciju poput MS Teams-a.

Na stranu to koliko je MS Teams jedno neopisano i neopevano djubre, i kako je u stanju da SAMELJE bateriju od laptopa i iPhone-a ZAJEDNO za vreme jednog konferencijskog poziva (za sta bi trebalo prisiliti ih da kupuju CO2 kredite i da imaju F energetsku nalepnicu)...

Probaj da "delis" neki prozor u Teams-u - kad to uradis, obrati paznju na prozor koji delis, svako malo "trepne". Pogotovu ako je MS Word, recimo.

Znas zasto trepne, Nedeljko?

Zato sto koriste nesto iz Electron-a (tj. Chromium-a), koji su pisali ljudi koji verovatno ne treba da pisu taj kod, IKAD.

Ali, cek cek cek BRE, pa to je NJIHOV OPERATIVNI SISTEM?!?!? I, tako, tu dolazimo do kraja ove tuzne price.

Pogledaj onaj message box gore. Ikona izgleda ruzno, jel da? Jbg, proizvodjac OS-a na zalost nije u stanju da popravi prikazivanje sistemskog message box-a u... svom OS-u.

Da, toliko je lose. Satya je ocigledno video Windows tim za rashod.

Pre par nedelja mi se instalirao neki Windows 10 update... Jao kuuul! Startuje se Windows ponovo...I promptno se u*ere u gace i izbaci jos jedan od ovih ruznih Message Box-ova "kmeeee... THERE WAS A PROBLEM STARTING C:\WINDOWS\System32\LogiLDA.dll" (???).

- Kao prvo, a sta me boli qr? I zasto mi to izbacuje na sred ekrana posle boot-a?
- Kao drugo, sama ideja da se koristi message box za ovo je... ali dobro, MSFT nikad nije bio Apple... ali brate mili pa umijte taj nesrecni message box, izgleda dodgy tako krzav :(
- Kao trece... WTF je bre ovo? Natpis "RunDLL", Poruka "MRSH U 3.14zdu" (ne tehnickom licu)... sta bre da radim sa tim? Kako da popravim... RunDLL (provali CaSE bog te ..)
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Dexic
ASP

Član broj: 253999
Poruke: 3837



+1376 Profil

icon Re: Linux prebacio 2%07.11.2020. u 01:08 - pre 41 meseci
Citat:
Branimir Maksimovic:
Evo rezultat sa Windows-a:

Code:


sizeof(wchar_t): 2
zażółć gęślą jaźń
zażółć gęślą jaźń
zażółć gęślą jaźń

C:\Users\bmaxa\source\repos\ConsoleApplication1\Debug\utf8.exe (process 3088) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .


Interesantna stvar je da mora da se promeni sistem locale da podrzava *beta* utf8 inace program puca sa exceptionom u pokusaju konverzije std::string u std::wstring :)
Jos jedna interesantna svar je da promena locale-ta zahteva *reboot* :))))))

Gde mislis da je problem?
Sta se desi ako uradis output u file?
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
2a02:8071:31e1:dd00:c134:29b..



+7169 Profil

icon Re: Linux prebacio 2%07.11.2020. u 01:52 - pre 41 meseci
@Dexic, fajl nece da ti pomogne. Cak i u Windowsu - konzola je... stdout :-)

U svakom slucaju, problem nastaje na liniji 25:

Code:

std::wstring lStr2(gToWide(lStr1));


Sto je pre bilo kakvog ispisa u bilo sta.

Puca u gToWide() funkciji ovde:

Code:

    std::wstring_convert<std::codecvt_utf8<wchar_t>> lConverter;
-->    return lConverter.from_bytes(aNarrow);


Pretpostaljam da puca zato sto se zagrcnuo sa ovim stringom:

Code:

std::string lStr1("zażółć gęślą jaźń");


Bez gurke Windows-a da tretira ANSI stringove kao UTF-8, OS ovo verovatno upakuje u neki ANSI *bem koje kodne strane.

Onda kad takav string das ovom nsrecnom codecvt_utf8, verovatno dobije epilepticni fit cim naleti na... sta god da je "ż".

Resenje 1 - Napusti ovaj univerzum
Resenje 2 - Ukljuci "beta" opciju u Windows-u 10 (beta od Aprila 2018, sve receno). Restartuj i moli se da neces na*ebati kasnije (hoces hoces, sta mislis sto je jos beta :-)
Resenje 3 - Predji na neki drugi OS koji ne pati od teske sizofrenije (definitivno ne TempleOS!)
Resenje 4 - Zameni proslu liniju sa:

Code:

std::string lStr1("\x7a\x61\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87\x20\x67\xc4\x99\xc5\x9b\x6c\xc4\x85\x20\x6a\x61\xc5\xba\xc5\x84");


Ako ne zamenis locale u 65001, imaces ovo:

Code:

sizeof(wchar_t): 2
za┼╝├│┼é─ç g─Ö┼øl─à ja┼║┼ä
zaz¾lc gesla jazn
za┼╝├│┼é─ç g─Ö┼øl─à ja┼║┼ä


Zasto? Zato sto nesrecni OS nema pojma da su lStr1 i gToNarrow(lStr2) UTF-8 kodirani (zasto ne ispisuje wchar kako treba... mrzi me i da gledam). Da bi to radilo, moras promenis sistemsku kodnu stranu ili sve rucno radis u svom programu.

Mozda ipak probati resenje 1...

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
2a02:8071:31e1:dd00:c134:29b..



+7169 Profil

icon Re: Linux prebacio 2%07.11.2020. u 02:34 - pre 41 meseci
Citat:
Nedeljko
Dakle, MS-ovo rešenje sa WCHAR ne rešava problem, nego ga čak i produbljuje - postojeće greške se ne ispoljavaju.


To sam pokusao da ti kazem. Kad pogledas celu tu sagu:

1. Windows 1.x je bio ANSI i sve je bilo dobro (u UK i USA). Haha, zaje*avam se naravno, cuj "sve je bilo dobro" :-)

- Windows ANSI zapravo >nije< ANSI tj. poceo je kao ECMA-94 ali je nastavio svojim putem, dok je ECMA-94 postao ISO 8859-1 a kasnije Unicode
- Microsoft, uvek raspolozen za pravljenje haosa je postigao da Windows i DOS nemaju isti karakter set, cak i pre Windows-a 3.x

2. Windows 2.0 i 3.0 su poceli da menjaju ANSI karakter set dodavajuci nove karaktere (IBM Codepage 1004 - Latin-1 Extended)

3. Windows NT 3.1 - NT 4.0 su bili UCS-2 i ANSI u isto vreme (MessageBoxW i MessageBoxA), kao Dr. Jekyll & Mr. Hyde; Ovo je momenat kada je seme hao.. kupusa posejano.

4. Windows 3.1 - Win 95, kao i NT 4.0 su dodali nove karaktere - ovo se ponekad zvalo CP 1007 (huh?)

5. Microsoft je preimenovao ovu kodnu stranu u poznatu CP 1252 prilikom izbacivanja Windows 95 i Windows NT 4.0; Win32 API u Windows 95 nije imao Unicode podrsku

U ovom periodu (Windows 3.1 - 95), na scenu stupaju razne medjunarodne kodne stranice, koje cesto nisu standardne i podlozne su promeni. Drugim recima, haos. Ako vas ne-engleski jezik koristi jednu stranicu, na konju ste :-) Kako je Windows 95 dominantan korisnicki OS u odnosu na NT, Unicode je daleko manje bitan, svet je prakticno ANSI ili CPxxxx

- Windows 3.1 pojma o kodnim stranama nije imao. Morao si build-ovati ceo OS za neki jezik

- Windows 95 je imao CP podrsku, ali na zalbe Amera je engleska verzija imala samo 1252 (Ameri se zalili na bacanje prostora)

- NT 4.0 je imao vecinu sa nekim izuzetcima. Unicode mislim da niko osim MSFT-a nije koristio.

- 1998 je izdat "euro" update NT 4.0 sa doradjenim kodnim stranama

- Iste 1998 je izasao, naravno, Windows 98 :-) Ovog puta ostvarujuci paritet sa NT-om, zato sto su Ameri dobili vece diskove, pa nije vise bilo razloga da se bune

- 2000-te je izasao Windows 2000, koji je baziran na NT arhitekturi. Microsoft prelazi sa UCS-2 na UTF-16 bez da promeni API-je i promptno zase*avaju NTFS imena, ceo svet mora da se prilagodi i izmisli WTF-8 kodiranje. Windows 2000 je podrzavao ANSI - ovo je bio najbolji momenat da se uvede UTF-8, ali je Microsoft suvise bio zauzet stavljanjem imena .NET na sve

- 2001-ve izlazi Windows XP, koji ima istu podrsku za pisma kao Windows 2000... pocinje vreme sporog ali sigurnog prelaska na "MSFT Unicode" od strane app vendora

- Windows ME... salio sam se :)

...

- Negde u medjuvremenu (nemam pojma kad tacno), Microsoft krece polako "ispod zita" da uvodi UTF-8, ali u strogo ogranicenim kolicinama

- 2018-me godine, Microsoft konacno izbacuje Windows 10 preview sa "beta" opcijom prelaska celog OS-a na UTF-8 (sto se postize specijalnom kodnom stranom: 65001)

...

E, sad, Nedeljko - Win32 je, prakticno, aktivan od 1993-ce (1990/1991 u alpha/beta varijanti), ali je kompletno nasledio Win16 i sva s*anja.

Ne mozemo zameriti MSFT-u na sve ANSI hackove do pojave Unicode-a. Takodje, ne mozemo zameriti Microsoftu sto je izbacio NT OS prakticno u isto vreme kao prva rana verzija UTF-8, sto znaci da nije bilo sanse da im se ukrste putevi razvoja. Plus, u tom momentu (1992-1993) UCS-2 je bio "sinonim" za Unicode.

Prvu sansu da poprave stvar su u Microsoftu dobili sa Windows 2000, posto su vec bacali UCS-2 u djubre, mogli su komotno da uvedu UTF-8. Ali to bi bilo drasticno teze, ponajvise za sam Microsoft a onda i za app vendore cije ANSI aplikacije cesto ni u ludilu ne bi mogle da se nose sa UTF-8. Realnost je da Microsoft nije ni imao previse izbora tu.

Zbog svega ovoga, Windows kod je prakticno miks ANSI stringova (rani Win32, i dalje gomila konzolnih i sistemskih stvari koje nemaju UI), nekih kvazi UTF-16 (u manjem ili vecem skladu sa UTF-16 a ne UCS-2), WTF-8 u OS kodu i, naravno, novih UTF-8 stvari. wchar_t im je 16-bitni za razliku od Linux-a gde je 32-bitni... i taaako.

Mislim da je adekvatan termin za to: kupus :-)

Bonus materijal:

Citat:

Microsoft's compilers often fail at producing UTF-8 string constants from UTF-8 source files. The most reliable method is to turn off UNICODE, not mark the input file as being UTF-8 (i.e. do not use a BOM), and arrange the string constants to have the UTF-8 bytes. If a BOM was added, a Microsoft compiler will interpret the strings as UTF-8, convert them to UTF-16, then convert them back into the current locale, thus destroying the UTF-8.[15] Without a BOM and using a single-byte locale, Microsoft compilers will leave the bytes in a quoted string unchanged.


Citat:

Bush hid the facts is a common name for a bug present in some versions of Microsoft Windows, which causes text encoded in ASCII to be interpreted as if it were UTF-16LE, resulting in garbled text. When the string "Bush hid the facts", without newline or quotes, was put in a new Notepad document and saved, closed, and reopened, the nonsensical sequence of Chinese characters "畂桳栠摩琠敨映捡獴" would appear instead.
...
The bug occurs when the string is passed to the Win32 charset detection function IsTextUnicode. IsTextUnicode sees that the bytes match the UTF-16LE encoding of valid (if nonsensical) Chinese Unicode characters, concludes that the text is valid UTF-16LE Chinese and returns true, and the application then incorrectly interprets the text as UTF-16LE.[2]


I tako... kad ce sarma?
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Linux prebacio 2%07.11.2020. u 06:50 - pre 41 meseci
Citat:
Dexic:
Citat:
Branimir Maksimovic:
Evo rezultat sa Windows-a:

Code:


sizeof(wchar_t): 2
zażółć gęślą jaźń
zażółć gęślą jaźń
zażółć gęślą jaźń

C:\Users\bmaxa\source\repos\ConsoleApplication1\Debug\utf8.exe (process 3088) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .


Interesantna stvar je da mora da se promeni sistem locale da podrzava *beta* utf8 inace program puca sa exceptionom u pokusaju konverzije std::string u std::wstring :)
Jos jedna interesantna svar je da promena locale-ta zahteva *reboot* :))))))

Gde mislis da je problem?
Sta se desi ako uradis output u file?


Problem nastaje pre ispisa, tj u pokusaju konverzije zato sto locale ne predvidja utf8. Ivan je lepo pokazao.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
p2-115.p59.bvcom.net.



+1064 Profil

icon Re: Linux prebacio 2%07.11.2020. u 07:39 - pre 41 meseci
Nego ako definisemo literal ovako:
Code:

std::string lStr1(u8"zażółć gęślą jaźń");

i konverziju ovako:
Code:

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> lConverter;


dobijamo ovo:
Code:

sizeof(wchar_t): 2
za┼╝├│┼é─ç g─Ö┼¢l─à ja┼║┼ä
zaz≤lc gesla jazn
za┼╝├│┼é─ç g─Ö┼¢l─à ja┼║┼ä

C:\Users\bmaxa\source\repos\ConsoleApplication1\Debug\utf8.exe (process 3992) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .


Program bar ne puca, alii dalje ne ispisuje kako treba ;)
Ovo je sa usa lokalom bez podrske za utf 8:)

 
Odgovor na temu

[es] :: Advocacy :: Linux prebacio 2%
(TOP topic, by flighter_022)
Strane: << < .. 141 142 143 144 145 146 147 148 149 150 ... Dalje > >>

[ Pregleda: 340931 | Odgovora: 3052 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.