- UTF-8 je najpogosteje podprto kodiranje; preprečuje napake pri uvozu in prikazu.
- Pretvori z google Drive ali Excel (CSV UTF-8) za ustvarjanje čistih datotek.
- Pri skupni rabi datotek vključite seznam UTF-8, da se kodiranje prepozna brez dvoumnosti.
- En Windows 10 1903+, v manifestu vsilite UTF-8 ali uporabite varne pretvorbe med UTF-8 in UTF-16.
Če v sistemu Windows delate z besedilnimi, CSV ali XML datotekami, je precej enostavno naleteti na čudne znake, nedelujoče naglasi ali sporočila, kot so »Neveljavno zaporedje bajtov v UTF-8«Te težave so običajno posledica neprimernega kodiranja za predvideno uporabo ali pa pretvorbe, ki je bila izvedena na pol.
V tem priročniku vam korak za korakom razložim, kako Zaznavanje in popravljanje napak kodiranja med UTF-8 in ANSI v sistemu Windows, katera orodja uporabiti (Beležnica, Excel, Google Drive, pripomočki konzole) in kako preprečiti njihovo ponovno pojavljanje. Videli boste tudi napredne možnosti sistema Windows za delo v UTF-8 v procesih in API-jih Win32 ter posebna priporočila za poteke uvoza podatkov, kot so tisti v Trgovski center.
Zakaj kodiranje ne uspe v sistemu Windows?
Najpogostejši vzrok je, da datoteka dejansko ni v obliki, ki jo aplikacija pričakuje, tudi če urejevalnik navede drugače ali jo optimistično »samodejno zazna«; na primer CSV v ISO-8859-1/Latin-1 ali ANSI ki jo ponuja platforma za uvoz UTF-8 in na koncu vrže napako neveljavnih bajtov.
Druga pogosta situacija je nered z Preambula BOM v UTF-8Čeprav v UTF-8 ni obvezen, ga mnogi urejevalniki v sistemu Windows dodajo za nedvoumno identifikacijo kodiranja. Brez BOM nekateri programi predpostavljajo ANSI ali interpretirajo vsebino s hevristiko, ki ni vedno natančna, kar ustvarja te "čudne" znake.
Končno, od nekaterih različic sistema Windows 10 (od leta 1903 naprej) naprej obstajajo mehanizmi, ki proces prisilijo k uporabi UTF-8 kot kodna stranČe se ne uporabljajo in se premikamo med API-ji -A in -W ali med starimi in novimi orodji, lahko pride do nesrečne mešanice ANSI, UTF-8 in UTF-16.
Tipične napake: »Neveljavno zaporedje bajtov v UTF-8«
To sporočilo se prikaže pri uvozu podatkov, ko datoteka, ki jo naložimo, ni Pravi UTF-8, tudi če ima končnico .csv ali .txt. Ciljna platforma pričakuje veljavna zaporedja UTF-8 in naleti na bajte, ki se ne ujemajo, zato pride do napake.
Nekateri paketi ustvarijo CSV v ISO-8859-1/ANSI in ko jih nalagate v sistem, ki sprejema samo UTF-8, ne uspejo. To se zgodi tudi, če jih shranite kot »UTF-8«, vendar ste vnesli dvojno kodiranje ali slabo upravljan BOM ali če je orodje dodalo znake, ki motijo potek dela.
V okoljih, kot so Trgovski center, poleg tega obstajajo dodatne validacije: sprejema UTF-8, UTF-16, Latin-1 in ASCII, če pa naložite XML, morate deklarirati pravilno kodiranje v prologu ali viru ni obdelan.
Kako pretvoriti v UTF-8 brez napak (preverjeni koraki)
Če imate preglednico ali datoteko CSV, ki zaradi kodiranja ne ustreza, vam ti postopki dajo Veljaven UTF-8 v skoraj vsakem scenariju. To so priporočene in pogosto uporabljene metode.
Možnost 1: Google Drive + preglednice
Ta tok je zelo robusten in ne zahteva nameščanja ničesar dodatnega; datoteko pretvorite v Čist UTF-8 v nekaj korakih.
- Odprite Google Drive in ustvarite nov list v Google Preglednicah. Uvozite datoteko CSV na tem listu.
- Preverite, ali so naglašeni znaki in črke ñ videti dobro; če so, pojdite na Datoteka > Prenesi > Vrednosti, ločene z vejicami (.csv).
- Prenesena datoteka bo v UTF-8; naložili ga boste lahko v svoj sistem brez napake zaradi neveljavnih bajtov.
Če ugotovite, da pri uvozu pridejo ven simboli, je normalno, da izvirna datoteka CSV ni dobro opisala svoje vsebine. ločila ali narekovajiPonovno ga uvozite in izberite ustrezno ločilo in nabor znakov, ki ga Drive zazna.
Možnost 2: Microsoft Excel (shrani kot CSV UTF-8)
Sodobni Excel vam omogoča shranjevanje neposredno v CSV UTF-8, kar je običajno dovolj za večino uvoznih platform.
- Odprite CSV v Excelu in izberite Datoteka> Shrani kot.
- Izberite vrsto CSV UTF-8 (ločeno z vejicami) (*.csv) in shranite.
Po shranjevanju je priporočljivo Ne odpri ponovno in ne shrani ponovno Excelovo datoteko, če želite le preveriti podatke. Če jo odprete za pregled, jo zaprite brez shranjevanja, da se izognete morebitnim spremembam kodiranja in ločila.
Možnost 3: Excel + Beležnica (če Excel ne ponuja UTF-8)
V nekaterih okoljih Excel pri izvozu ne prikaže možnosti UTF-8; v tem primeru je varna pot uporaba oblike UTF-XNUMX. Besedilo Unicode (.txt) in dokončajte pretvorbo v Beležnici.
- Odprite datoteko .xlsx v Excelu in jo shranite kot Besedilo Unicode (.txt)To ustvari tabelarično datoteko v UTF-16.
- Odprite to datoteko .txt z beležnico; za nekatere simbole boste videli čudne znake, ker Beležnica ne prikaže vseh znakov Unicode odlično, ampak brez skrbi.
- Za pretvorbo v CSV zamenjajte vse tabulatorje z vejicami: kopirajte tabulator in ga uporabite Zamenjaj z ",".
- Izberite Datoteka> Shrani kot, vstavite končnico .csv in izberite UTF-8 kot kodiranje.
Zdaj boste imeli datoteko .csv v UTF-8 Veljavno. Odprite ga samo za preverjanje in če najdete kaj nenavadnega, to popravite v izvirnem listu in ponovite postopek, ne da bi končno datoteko CSV ponovno shranili v Excelu.
Shrani kot ANSI v sistemu Windows: Zakaj se včasih ne shrani
V nekaterih primerih odprete datoteko .txt v beležnici, izberete Shrani kot > ANSI in ko ga ponovno odprem, se spet prikaže kot UTF-8. Kaj se dogaja? Morda je vzrok v tem, da je vsebina znaki, ki jih ni mogoče predstaviti v ANSI, urejevalnik uporablja hevristiko ali datoteka že ima BOM, ki otežuje zaznavanje.
z Notepad + + Pomembno je razlikovati med možnostma »Kodiraj v« in »Pretvori v«. Ustrezna možnost za spremembo dejanskega kodiranja datoteke je Pretvori v ANSI o Pretvori v UTF-8 (z ali brez BOM) in nato shranite. Uporaba samo možnosti »Kodiraj v« spremeni način interpretacije, ne nujno načina shranjevanja.
V sistemu Windows veliko urejevalnikov doda BOM v UTF-8, kar pomaga pri nedvoumnem programiranju in izmenjavi datotek. Vendar pa v okoljih Mac y Linux ni vedno dodan; brez BOM-a zaznavanje, ali gre za UTF-8 ali ANSI, temelji na hevristika v večini primerov združljivo, vendar lahko pri »mejnih« datotekah ne deluje.
Merchant Center: Podprte kode in najboljše prakse
Merchant Center podpira UTF-8, UTF-16, Latin-1 in ASCIIČe niste prepričani o svojem kodiranju vira, uporabite možnost avtomatsko zaznavanjeZa datoteke, shranjene z Beležnico, izberite ANSI ali UTF-8 v "Kodiranju".
Če greš gor XML V Latin-1 ali UTF-16 ga morate izrecno deklarirati v uvodu dokumenta. Glavo zamenjajte z ustrezno, na primer: ISO‑8859‑1 ali UTF‑16 v atributu kodiranja.
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="UTF-16"?>
Če želite popraviti katalog iz samega Merchant Centra, pojdite na Izdelki > Zahteva pozornost, filtrirajte po težavi, uredite prizadete članke in potrdite, da so osnovne lastnosti skladni z UTF-8.
Če je izdelkov veliko, prenesite seznam v obliki .csv z ikone opravljanje, primerjajte ga z izvirnim virom in ponovno naložite popravljene podatke. Ta postopek zagotavlja, da je končni vir v Dosleden UTF-8 s katerim platforma potrdi.
V sistemu Windows vsili UTF-8 kot kodno stran procesa
Od različice sistema Windows 10 1903 naprej lahko navedete, da vaš proces uporablja UTF-8 kot kodna stran privzeto se izognemo dvoumnim pretvorbam in olajšamo združljivost v sodobnih okoljih.
Za pakirano aplikacijo deklarirajte lastnost v manifest aplikacije; za nepakirano aplikacijo Win32 uporabite manifest združitveV obeh primerih definirate aktivno stran kot UTF-8.
Primer manifesta aplikacije appx (pakirana aplikacija):
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" ...
xmlns:uap7="http://schemas.microsoft.com/appx/manifest/uap/windows10/7"
xmlns:uap8="http://schemas.microsoft.com/appx/manifest/uap/windows10/8"
IgnorableNamespaces="... uap7 uap8 ...">
<Applications>
<Application ...>
<uap7:Properties>
<uap8:activeCodePage>UTF-8</uap8:activeCodePage>
</uap7:Properties>
</Application>
</Applications>
</Package>
Primer manifesta za združevanje (nepakiran Win32):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="..." version="6.0.0.0"/>
<application>
<windowsSettings>
<activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
</windowsSettings>
</application>
</assembly>
Če ciljate na starejše različice sistema Windows, izjava morda obstaja, vendar jo boste morali upravljati zaznavanje in pretvorba Kot vedno, z minimalno ciljno vrednostjo 1903 ali višjo, bo postopek potekal v kodiranju UTF-8, kar vam bo prihranilo veliko glavobolov.
Win32 API-ji: različice -A proti -W in pretvorbe
Številni Win32 API-ji so na voljo v različicah -A in -WPrvi delajo z char * sledijo kodni strani ANSI sistema, drugi pa uporabljajo UTF-16 (WCHAR)Tradicionalno je Windows označeval zastavice -W, sodobne različice pa so izboljšale združljivost -A z UTF-8 ko je ACP UTF-8.
Za medsebojno delovanje je pogosto potrebno pretvarjati med UTF-8 in UTF-16Funkciji MultiByteToWideChar in WideCharToMultiByte sta standardni orodji za to in s CP_UTF8 delujeta zelo dobro, če ju pokličete s pravilnimi zastavicami.
Ko pokličete z KodnaPage = CP_UTF8, uporabite dwFlags = 0 ali MB_ERR_NEVELJAVNI_ZNAKIČe ne, lahko naletite NAPAKA_NEVELJANE_ZASTAVICETo zagotavlja, da se med pretvorbo zaznajo neveljavni znaki in se ne utišajo.
Zaznavanje UTF-8, ANSI in vloge BOM-a
V besedilnih formatih mnogi kodirniki dodajo BOM (oznaka vrstnega reda bajtov) na začetku. V UTF-8 so to trije bajti, ki omogočajo jasno prepoznavanje kodiranja. To ni obvezno, je pa praktično pri izmenjavi datotek med različnimi računalniki in orodji.
Kaj pa, če ni BOM-a? Založniki se zatečejo k hevristika: preveri možne vzorce bajtov v UTF-8 in, če se ujemajo, predpostavi to kodiranje. To skoraj vedno deluje, vendar obstajajo robni primeri; na primer datoteka s čisto ANSI naglasi in tildami lahko zavede nekatere detektorje in povzroči napačna identifikacija.
V praksi, če boste datoteke delili med heterogenimi okolji, je to dobra ideja vključujejo BOM v UTF-8 ali pa se vsaj znotraj ekipe dogovorite o jasni konvenciji, da bodo vsi shranjevali na enak način.
Množična pretvorba s FileEncodingConverterjem
Če morate pretvoriti veliko datotek v strukturo map, je zelo uporabna možnost pripomoček za konzolo kot FileEncodingConverter. Omogoča vam, da določite osnovno mapo, ciljno kodiranje in filtre razširitev za paketno obdelavo.
To orodje podpira ANSI, ASCII, Unicode, UnicodeBI, UTF32, UTF7, UTF8 in UTF8BOMČe izpustite kodiranje, se kot privzeta vrednost uporabi sistem ANSI; zato je dobro, da izhod izrecno določite, če je vaš cilj UTF-8.
Poleg tega omogoča dva zelo praktična modifikatorja: /f za prisilo prekodirati, tudi če je »že« v tej obliki (uporabno za dodajanje BOM v UTF-8) in /b za paketni način (ne ustavljajte se na koncu, idealno za skripte .bat).
Primer uporabe za pretvorbo HTML in TXT samo v Unicode Big Endian (UnicodeBI) ali za konsolidacijo v UTF-8 z BOM v XML, TXT in HTM, ki vsebujejo »ES« v imenu:
FileEncodingConverter C:\MiCarpeta UnicodeBI
FileEncodingConverter C:\MisArchivosDeDatos UTF8 *ES*.xml,*.txt,*.htm* /f
FileEncodingConverter C:\MisArchivosDeDatos UTF8BOM *ES*.xml,*.txt,*.htm* /f
Zanimiva podrobnost: lahko zaznaj UTF-8 brez BOM z uporabo hevristike; vendar v mejnih datotekah morda ni 100-odstotno natančen. V teh primerih modifikator /f in pretvorite v UTF8BOM Zagotavlja vam nedvoumen identifikator.
Kaj storiti, ko Notepad++ »napačno prepozna«
Notepad++ in drugi urejevalniki imajo detektorje kodiranja, ki ob soočanju z določenimi datotekami z naglasi in eñi (izključno ANSI), so lahko razvrščeni kot drug jezik ali pa se ne odprejo. Občasno lahko Notepad++ označi jih kot hebrejske ali prikazuje poškodovane znake.
Za referenco, stari Windows Notepad je ponavadi predvideval ANSI privzeto, in Visual Studio jih običajno pravilno prepozna. Vendar je lekcija jasna: če datoteka ne vsebuje BOM-a in vsebuje »občutljive« znake, lahko zaznavanje ne biti zanesljiv.
Praktično priporočilo: uporabite »Pretvori v UTF-8« in shranite. Če boste te datoteke delili s tretjimi osebami, razmislite o »UTF‑8 z BOM"da prejemnik ne bo dvomov."
Hiter kontrolni seznam za uvoz CSV in XML brez presenečenj
Preden naložite datoteko na platformo, ki zahteva UTF-8, preglejte ta seznam in se boste izognili klasični napaki »vira ni mogoče obdelati«.
- Prepričajte se, da je datoteka dejansko v UTF-8 (uporabite Drive, Excel UTF‑8 ali Beležnico z možnostjo »Shrani kot« UTF‑8).
- Če gre za XML, deklarirajte kodiranje pravilno v prologu (UTF‑8, UTF‑16, ISO‑8859‑1 itd.).
- Končne datoteke CSV ne odpirajte ponovno in ne shranjujte v Excelu, razen če boste izvozi ga znova kot UTF-8.
- Pred izvozom odstrani redke znake (zavite narekovaje, nevidne simbole, tabulatorje) ni želel).
Ko forum ne pomaga: kam se obrniti
V uradnih nitih skupnosti vas lahko moderator usmeri na področje Vprašanja in odgovori o sistemu Windows Za vprašanja zunaj okvira foruma. Ni slaba ideja, da objavite tam, če je vaša težava s sistemom ali privzetim urejevalnikom.
Po drugi strani pa boste pri brskanju po platformah, kot je Reddit, videli pasice zasebnost in piškotkiNe vplivajo na vaše šifriranje; gre le za obvestila o obdelavi podatkov in nastavitvah sledenja.
Razvijalci: Pravilno delovanje z UTF-8 v sistemu Windows
Če razvijate v Win32/.NET in potrebujete interakcijo z API-ji -A/-W, razmislite o vsiljevanju UTF-8 v procesu z manifestom (Windows 10 1903+) ali vedno delajte z različicami -W (UTF‑16) pretvorba z MultiByteToWideChar/WideCharToMultiByte.
Za pretvorbe s CP_UTF8 navedite dwFlags = 0 ali MB_ERR_INVALID_CHARS da bi odkrili težave s podatki in se izognili napakam, kot so NAPAKA_NEVELJANE_ZASTAVICETo ščiti vaš besedilni cevovod pred neveljavna zaporedja.
Robni primeri in najboljše prakse z BOM
Obstajajo datoteke, ki vsebujejo samo naglasi in črke eñe (brez drugih simbolov), kar lahko zmede hevristiko zaznavanja in celo povzroči neuspeh prekodiranja. UTF-8Redki so, vendar obstajajo; prav zaradi tega je dosledna uporaba BOM v UTF‑8 olajša prepoznavanje kodiranja s strani katerega koli orodja.
Če ste v nadzorovanem okolju (vsi vaši sistemi vedo, da uporabljate UTF-8 brez BOM ali ANSI), lahko brez BOM-a. Za izmenjave tretjih oseb pa je dodajanje BOM-a preprost način za izogibajte se dvoumnostim in prihranite podporo.
Rešitev za resnični primer: »Moja datoteka se vedno vrne v kodiranje UTF-8«
Ko poskušate vsiliti ANSI datoteki .txt in se ob odprtju »vrne« na UTF-8, preverite te točke: vsebina je morda znaki, ki niso ANSI, urejevalnik morda dodaja BOM ali pa vam samodejno zaznavanje prikaže nekaj drugačnega od shranjenega.
Poskusite uporabiti Notepad++ z "Pretvori v ANSI« (ne samo »Kodiraj v«). Če se težava nadaljuje, boste morda morali simbole zamenjati z ustreznicami ANSI ali spremeniti potek, da bo delovalo vse v UTF-8, ki je najpogosteje uporabljeno kodiranje na spletu in v integracijah.
Če ciljna platforma zahteva UTF-8 (kot to počne veliko uvoznikov), je najučinkovitejši način pretvorite celoten cevovod v UTF-8 iz vira (Excel/Drive) in pozabite na ANSI, razen če ga zahteva starejše orodje.
Na splošno je danes najboljša strategija imeti svoje datoteke v UTF-8 in pri izmenjavi s tretjimi osebami razmislite o uporabi BOM tako da je zaznavanje nedvoumno. Če naletite na »neveljavno zaporedje bajtov v UTF-8«, uporabite Google Drive ali v Excelov »CSV UTF‑8« ali pa uporabite potek Excel > Unicode Text > Notepad (shrani kot UTF‑8). V razvoju vsilite UTF‑8 z manifestom ali uporabite jasne pretvorbe med UTF-8 in UTF-16 z ustreznimi zastavicami. In če morate upravljati veliko datotek, je na voljo konzolni pripomoček, kot je Pretvornik kodiranja datotek prihrani vam ure dela.
Strasten pisec o svetu bajtov in tehnologije nasploh. Rad delim svoje znanje s pisanjem in to je tisto, kar bom počel v tem blogu, saj vam bom pokazal vse najbolj zanimive stvari o pripomočkih, programski opremi, strojni opremi, tehnoloških trendih in še več. Moj cilj je, da vam pomagam krmariti po digitalnem svetu na preprost in zabaven način.