Am'm a dezvolta o parte dintr-o aplicație pe care o's responsabil pentru exportul unor date în fișiere CSV. Aplicația folosește UTF-8 din cauza dicționar natura la toate nivelurile. Dar de deschidere astfel de fișiere CSV (de exemplu, conțin diacritice, litere chirilice, litere grecești) în Excel nu obține rezultatele așteptate arată ceva de genul Г"/Г¤, Г–/Г¶
. Și eu nu't știu cum de a forța Excel înțeleagă că deschide fișierul CSV este codat în UTF-8. Am încercat, de asemenea, specificarea UTF-8 BOM `EF BB BF, dar Excel ignoră asta.
Există vreo soluție?
P. S. Ce instrumente ar putea să se comporte ca Excel nu?
UPDATE
Trebuie să spun că m-am'am confundat comunitate cu formularea întrebării. Când am fost întrebat această întrebare, am cerut o modalitate de deschidere a unei UTF-8 fișiere CSV în Excel fără probleme pentru un utilizator, într-o fluent și transparent. Cu toate acestea, am folosit-o greșit formularea întreb pentru a face aceasta automatically. Care este foarte confuz și nu se potrivește cu VBA macro automatizare. Există două răspunsuri pentru întrebările pe care îl apreciez cel mai mult: primul raspuns de Alex https://stackoverflow.com/a/6002338/166589 și am'am acceptat acest răspuns; și cea de-a doua de Mark https://stackoverflow.com/a/6488070/166589 care au apărut un pic mai târziu. De gradul de utilizare punct de vedere, Excel părea să fi lipsa de bun user-friendly UTF-8 CSV sprijin, așa că ia în considerare both răspunsuri sunt corecte, și eu am acceptat-Alex's a răspunde în primul rând pentru că într-adevăr a declarat că Excel nu a fost în stare să fac asta în mod transparent. Asta este ceea ce am confundat cu automatically aici. Mark's a răspunde promovează un mod mult mai complicat pentru utilizatorii mai avansați pentru a obține rezultatul așteptat. Ambele răspunsuri sunt mari, dar Alex's se potriveste mea nu este specificat clar întrebare un pic mai bine.
UPDATE 2
Cinci luni mai târziu, după ultima modificare, am'am observat ca Alex's răspunsul a dispărut pentru un motiv oarecare. Eu chiar sper că a fost't o problemă tehnică și sper că nu mai există nici o discuție pe care răspuns este mai mare acum. Așa că m-am'm a accepta Mark's a răspunde cât mai bun.
Alex este corect, dar ca trebuie sa-export în csv, puteți oferi utilizatorilor acest sfat atunci când deschideți fișiere csv:
Acest mod de caractere speciale ar trebui să arate în mod corect.
UTF-8 Byte-order marker vor idee Excel 2007+ in pentru faptul că ai're folosind UTF-8. (A se vedea DECI acest post).
În cazul în care cineva are aceleasi probleme am fost .NET's codare UTF8 clasa nu ieșire un octet-pentru marker într-un GetBytes()
apel. Ai nevoie de a a utiliza fluxuri (sau de a folosi soluție), pentru a obține BOM la ieșire.
Este incredibil că există atât de multe răspunsuri, dar nici unul nu răspunde la întrebare:
", atunci Când am fost întrebat această întrebare, am cerut o modalitate de deschidere a unei UTF-8 fișier CSV în Excel fără probleme pentru un utilizator,..."
Răspunsul marcat ca răspunsul acceptat cu 200+ up-voturi este inutil pentru mine, pentru că eu nu't vreau să-mi dau utilizatorilor un manual de cum să configurați Excel. În afară de faptul că: acest manual se va aplica o versiune Excel dar alte Excel versiuni diferite meniuri și dialoguri de configurare. Ai nevoie de un manual pentru fiecare versiune Excel.
Deci, întrebarea este cum să facă Excel show UTF8 de date cu un simplu dublu click?
Ei bine, cel puțin în Excel 2007 acest lucru nu este posibil dacă utilizați fișiere CSV pentru că UTF8 BOM este ignorat și veți vedea numai gunoaie. Acest lucru este deja parte a întrebării de Lyubomyr Shaydariv:
"am încercat, de asemenea, specificarea UTF-8 BOM EF BB BF, dar Excel ignoră că."
Nu face aceeași experiență: Scris de rus sau grec de date într-un UTF8 fișier CSV cu BOM rezultate în gunoi în Excel:
Conținutul de UTF8 fișier CSV:
Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ
Rezultatul în Excel 2007:
O soluție este de a nu folosi CSV, la toate. Acest format este implementat atât de stupid de Microsoft, care depinde de setările regionale din panou de control daca virgula sau virgula este folosit ca separator. Deci, același fișier CSV pot deschide corect pe un computer, dar pe alt calculator nu. "CSV" inseamna "Virgula Valori Separate" dar de exemplu pe un german Windows în mod implicit și virgulă trebuie să fie folosit ca separator virgulă în timp ce nu funcționează. (Aici ar trebui să fie numit SSV = Valori Separate prin punct și Virgulă) fișiere CSV pot fi schimbate între diferite versiuni de limbă de Windows. Aceasta este o problemă suplimentară la UTF-8 problemă.
Excel există de zeci de ani. Este o rușine că Microsoft nu a fost în măsură să pună în aplicare astfel de un lucru de bază în format CSV import în toți acești ani.
Cu toate acestea, dacă ai pus aceleași valori într-un fișier HTML și salvați fișierul ca UTF8 fișier cu BOM cu extensia de fișier XLS veți obține rezultatul corect.
Conținutul de UTF8 XLS fișier:
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
Rezultatul în Excel 2007:
Puteți utiliza chiar și culorile în HTML care Excel va afișa corect.
<style>
.Head { background-color:gray; color:white; }
.Red { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>
Rezultatul în Excel 2007:
În acest caz, doar la masă în sine are un chenar negru și linii. Dacă doriți ca TOATE celulele pentru a afișa linii de grilă acest lucru este, de asemenea, posibil in HTML:
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>MySuperSheet</x:Name>
<x:WorksheetOptions>
<x:DisplayGridlines/>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
</body>
</html>
Acest cod chiar vă permite să specificați numele de foaie de lucru (aici "MySuperSheet")
Rezultatul în Excel 2007:
A avut aceleași probleme cu PHP generate de fișiere CSV. Excel ignorat BOM când Separatorul a fost definit prin `"sep=,\n" la începutul conținutului (dar, desigur, după BOM).
Deci adăugarea unui BOM ("\xEF\xBB\xBF"
) la începutul conținutului și setarea virgulă ca separator de prin fputcsv($fh, $data_array, ";");
nu truc.
Am avut aceeași problemă în trecut (cum a produce fișiere Excel poate citi, și alte instrumente pot, de asemenea, citit). Am fost folosind TSV, mai degrabă decât CSV, dar aceeasi problema cu codificări venit.
Nu am reușit să găsesc vreo cale de a ajunge Excel să recunoască UTF-8 în mod automat, și eu nu am fost dispus/capabil de a provoca pe consumatorii de fișiere complicat instrucțiuni cum să le deschidă. Așa că am codat-le ca UTF-16le (cu un BOM) în loc de UTF-8. De două ori mai mare, dar Excel poate recunoaște codare. Si se comprima bine, astfel încât dimensiunea rar (dar din păcate nu nu) contează.
Ca am postat pe http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html:
Spune-dezvoltator de software ocupă de generarea CSV pentru a le corecta. Ca o soluție rapidă puteți folosi gsed pentru a introduce UTF-8 BOM la începutul șirului:
gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv
Această comandă insertii UTF-4 BOM dacă nu este prezent. Prin urmare, este un idempotent comanda. Acum ar trebui să fie în măsură să faceți dublu clic pe fișier și deschideți-l în Excel.
Puteți converti .fișier csv pentru UTF-8 BOM prin Notepad++:
de Codificare
→Converti la UTF-8
.A lucrat în Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) pe 64 de biți de Microsoft Office Professional Plus 2013 pe Windows 8.1 cu locale pentru programele non-Unicode setat la "germană (Germania)".
Doar pentru a ajuta utilizatorii interesați privind deschiderea fișierului în Excel pe care o realiza acest thread ca mine.
Eu am folosit wizard de mai jos și ea a lucrat bine pentru mine, importul unei UTF-8 fișiere. Nu transparent, dar util dacă aveți deja dosarul.
Sursa: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0
Simplu vba macro pentru deschiderea utf-8 text și fișiere csv
Sub OpenTextFile()
filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
If filetoopen = Null Or filetoopen = Empty Then Exit Sub
Workbooks.OpenText Filename:=filetoopen, _
Origin:=65001, DataType:=xlDelimited, Comma:=True
End Sub
Origine:=65001 este UTF-8. Virgulă:Adevărat pentru .csv fișiere distribuite în coloane
Salvați-l în Personal.xlsb să-l aibă întotdeauna la dispoziție. Personalizarea excel toolbar adăugarea unui macro buton de apel și de a deschide fișierele de acolo. Puteți adăuga mai multe formatări la nivel macro, cum ar fi coloana autofit , aliniere,etc.
Da, acest lucru este posibil. După cum sa menționat anterior de către mai mulți utilizatori, se pare că există o problemă cu excel citirea corectă Byte Order Mark atunci când fișierul este codat în UTF-8. Cu UTF-16 nu pare să aibă o problemă, așa că este endemică la UTF-8. Soluția pe care am folosi pentru acest lucru este adăugarea BOM, de DOUĂ ori. Pentru aceasta am execute următoarele sed comandă de două ori:
sed -I '1s/^/\xef\xbb\xbf/' *.csv
, unde wildcard poate fi înlocuit cu orice nume de fișier. Cu toate acestea, acest lucru duce la o mutație de sep= la începutul .fișier csv. A .csv fișier se va deschide în mod normal în excel, dar cu un plus de rând cu "sep=" în prima celulă. "sep=" poate fi, de asemenea, eliminate la sursă .csv în sine, dar atunci când deschid fișierul cu VBA delimitatorul ar trebui să fie specificate:
Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)
Format 6 este .format csv. Set Locale cu adevărat, în cazul în care există date din fișier. Dacă Local nu este setată la true datele vor fi Americanizat, care, în unele cazuri, va fi corupte .format csv.
Un adevărat uimitor listă de răspunsuri, dar din moment ce unul destul de bun este încă lipsește, am'll-l menționez aici: deschideți fișierul csv cu foi de calcul google și salvați-l înapoi la computerul local ca un fișier excel.
În contrast cu Microsoft, Google a reușit să suport UTF-8 fișiere csv astfel încât acesta funcționează doar pentru a deschide dosarul acolo. Și export în format excel, de asemenea, pur și simplu funcționează. Deci, chiar dacă acest lucru nu poate fi soluția preferată pentru toate, este destul de siguranță și numărul de click-uri nu este la fel de mare ca se poate suna, mai ales atunci când te're deja conectat la google oricum.
salut am'm folosind ruby on rails pentru csv generație. În cererea noastră, am de gând să du-te pentru mai multe limbi(I18n) și ne-am confruntat cu o problemă în timp ce vizualizați I18n conținut în fișierul CSV de windows excel.
A fost bine cu Linux (Ubuntu) și mac.
Am identificat că windows excel nevoie pentru a fi importate datele din nou pentru a vizualiza datele reale. În timp ce importul vom obține mai multe opțiuni pentru a alege set de caractere.
Dar acest lucru nu poate fi educat pentru fiecare utilizator, astfel încât soluția căutăm este de a deschide doar prin dublu clic.
Apoi am identificat mod de a arăta date de modul deschis și bom în windows excel cu ajutorul aghuddleston sinteza. Adăugat la referință.
Exemplu I18n conținut
În Mac și Linux
Suedeză : Förnamn Limba engleză : în Primul rând numele
În Windows
Suedeză : Förnamn Limba engleză : în Primul rând numele
def user_information_report(report_file_path, user_id)
user = User.find(user_id)
I18n.locale = user.current_lang
open_mode = "w+:UTF-16LE:UTF-8"
bom = "\xEF\xBB\xBF"
body user, open_mode, bom
end
def headers
headers = [
"ID", "SDN ID",
I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
I18n.t('sys_phone_number')
]
end
def body tenant, open_mode, bom
File.open(report_file_path, open_mode) do |f|
csv_file = CSV.generate(col_sep: "\t") do |csv|
csv << headers
tenant.patients.find_each(batch_size: 10) do |patient|
csv << [
patient.id, patient.patientid,
patient.first_name, patient.last_name, "#{patient.dob}",
"#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
"#{patient.city}", "#{patient.state}", "#{patient.zip}",
"#{patient.phone_number}"
]
end
end
f.write bom
f.write(csv_file)
end
end
Importante lucruri de reținut aici este modul deschis și bom
open_mode = "w+:UTF-16LE:UTF-8"
bom = "\xEF\xBB\xBF"
Înainte de a scrie CSV introduce BOM
f.scrie bom
f.scrie(csv_file)
Windows și Mac
Fișierul poate fi deschis direct, prin dublu clic.
Linux (ubuntu)
În timp ce deschiderea unui fișier cere pentru separator opțiuni -> alegeți "TAB"
Acest lucru nu este corect de a aborda problema, dar de cand am dat peste acest lucru și soluțiile de mai sus nu't de lucru pentru mine sau au avut cerințe nu puteam't cunosc, aici este un alt mod de a adăuga BOM atunci când aveți acces la vim:
vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv
M-am confruntat cu aceeași problemă în urmă cu câteva zile, și nu a putut găsi nici o soluție pentru că nu pot folosi de import de la csv
caracteristica pentru că face totul pentru a fi un stil ca șir de caractere.
Soluția mea a fost să deschideți mai întâi fișierul cu notpad++ și schimba codarea ASCII`. Apoi a deschis fișierul în excel și a mers cum era de așteptat.
Dacă doriți pentru a face complet automat, cu un singur clic, sau pentru a încărca în mod automat în Excel dintr-spune-o pagină web, dar poate't genera corespunzătoare fișiere Excel, atunci aș sugera să te uiți în format SYLK ca o alternativă. OK, nu este la fel de simplu ca CSV, dar este bazat pe text și foarte ușor să pună în aplicare și suportă UTF-8, fără probleme.
Am scris o clasa PHP care primește datele și ieșirile de un SYLK fișierul care se va deschide direct în Excel făcând clic pe file (sau va auto-lansare Excel dacă ai scrie un fișier de pe o pagină web cu tipul mime corect. Puteți chiar să adăugați formatare (cum ar fi bold, numere format, în special, moduri etc) si modifica dimensiunile coloanei, sau auto dimensiune coloane a textului în coloane și în toate codul este, probabil, nu mai mult de 100 de linii.
Este foarte ușor pentru a inversa inginer SYLK de a crea o foaie de calcul simplu și salvarea ca SYLK și apoi citit-o cu un editor de text. Primul bloc sunt antete și numărul standard de formate pe care le va recunoaște (pe care le repetă în fiecare fișier pe care îl creați), atunci de date este pur și simplu o de coordonate X/Y și o valoare.