|
SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
09. 09. 2008. | #1 |
član
Certified
Datum učlanjenja: 20.08.2008
Poruke: 58
Hvala: 21
144 "Hvala" u 15 poruka
|
[MSSQL] Eksport u xml, utf-8 encoding
Vec par sati pokusavam da razresim problem za koji se ipak nadam da je problem ipak u meni i da ja nešto uporno previdjam a ne u ogranicenju samog servera pa se nadam da ce mi neko tako nesto i potvrditi posto nemam vise ideje gde da potrazim resenje.
Naime, potrebno je da napravim procedure za eksport podataka iz MSSQL 2005 u nekoliko xml fajlova. Za eksport podataka iz MSSQL-a obicno koristim naredbu bcp jer mi je tako najjednostavnije i sto ne zahteva nikakve dodatne alate osim onih koje imam u okviru samog mssql-a (tj. ceo kod strpam u jednu ili vise uskladistenih procedura, ubacim to u job koji se vrti onoliko puta dnevno koliko treba i to je to). No, problem se pojavio na potpuno neocekivanom mestu a to je sto se trazi da generisani xml fajlovi imaju utf-8 encoding a mssql izgleda podrzava samo utf-16 i nema sanse da ga nateram da fajl eksportuje u utf-8 formatu! Da li i gde ja to gresim kada ne mogu da pronadjem resenje za taj problem (a vec satima iscitavam sve zivo na tu temu po netu i svim mogucim helpovima u vezi mssql-a i utf-8) ili mssql stvarno nema podrsku za eksport u fajl koji bi bio u utf-8 formatu?! Ako to stvarno ne mogu da uradim samo koristeci sql, opcija mi je da eksportujem u utf-16 a da onda radim konverziju u utf-8 nekim posebnim alatom ali koji bi morao da moze da se poziva i koristi iz komandne linije. Na netu postoje programi koji rade takve konverzije ali nijedan nema opciju da tako nesto moze da se uradi samo pozivom iz komandne linije. |
09. 09. 2008. | #2 | |
хардвераш
Qualified
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
|
Citat:
ф
__________________
Рад је створио човека. Рад ће га и уништити. |
|
09. 09. 2008. | #4 | |
član
Certified
Datum učlanjenja: 20.08.2008
Poruke: 58
Hvala: 21
144 "Hvala" u 15 poruka
|
Citat:
ah, nadjoh i dll za windows pa cak i programce ali izgleda kao da nista ne uradi jer se i dalje otvara kao utf-16...moguce je da ipak uradi konveziju ali ne menja zaglavlje kao sto je jablan naveo... |
|
09. 09. 2008. | #5 | |
хардвераш
Qualified
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
|
Citat:
Да се разумемо, иконв само и искључиво конвертује кодне распореде, ако ти треба још нешто, онда је то посебна тема. Али углавном, сигвин има вероватно све што ти треба за аутоматске измене текста. ф
__________________
Рад је створио човека. Рад ће га и уништити. |
|
09. 09. 2008. | #6 |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
TECkit bi trebalo da bude ono što tražiš, ali proveri u uputstvu: http://scripts.sil.org/cms/scripts/p...ECkitDownloads
|
09. 09. 2008. | #7 |
I'm a PC too.
Wrote a book
Datum učlanjenja: 06.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
|
@nenana: evo nešto za 5 minuta, ali imaj na umu da ja pojma baš nemam oko tog enkodiranja. Valjda će da se javi Dragi Tata, on to ima otprilike u malom prstu.
Kôd:
static void Main( string[] args ) { string str = ""; using ( StreamReader rdr = File.OpenText( args[0] ) ) { str = rdr.ReadToEnd(); } byte[] b = Encoding.UTF8.GetBytes( str ); using ( StreamWriter o = new StreamWriter( args[1] ) ) { o.Write( Encoding.UTF8.GetString( b ) ); } } xyz.exe inputfajl.txt outputfajl.txt E sad, pošto je ovo .NET rešenje, ukoliko radiš sa novijim SQL serverom (2005 ili 2008), onda bi tu konverziju mogao da uradiš i u istom, pošto može da se koristi .NET za programiranje sproc. Eto, za početak nije loše, pretpstavljam - mislim da taj kod gore može i kraće da se napiše, itd. Takođe obrati pažnju da to čita ceo fajl u jednom cugu, itd, da ne bude problema oko velikih fajlova (onda prepravi da čitaš liniju po liniju, itd). //edit: aha, eto i Nemanje.. oh, well.
__________________
Commercial-Free !!! Poslednja izmena od degojs : 09. 09. 2008. u 23:20. |
10. 09. 2008. | #8 | ||
član
Certified
Datum učlanjenja: 20.08.2008
Poruke: 58
Hvala: 21
144 "Hvala" u 15 poruka
|
Citat:
Hvala! Citat:
No, hvala na podsećanju za upotrebu .NET-a. Koristimo SQL 2005 ali sam u brzini potpuno smetnula sa uma da tu mogu da ga koristim! Vrlo verovatno ću na kraju tako i uraditi, sad bih da zbog vrlo bliskog deadline-a primenim nešto što radi odmah na iole zadovoljavajući način a posle ću da optimizujem. Hvala svima na odgovorima! |
||
10. 09. 2008. | #9 |
član
Certified
Datum učlanjenja: 20.08.2008
Poruke: 58
Hvala: 21
144 "Hvala" u 15 poruka
|
Samo da se javim da je operacija uspela i da je pacijent preživeo.
Evo kratkog opisa šta je tačno bio problem i kako je razrešen, za slučaj da se neko nadje u sličnoj situaciji: Problem: Eksport podataka iz MSSQL u txt/xml korišćenjem naredbe bcp s tim da rezultujuci fajl ima utf-8 encoding. Pokušaj rešavanja: Očekivano je bilo da sledeća opcija odradi posao: bcp "select * from nekaTabela" queryout "C:\temp\nekaTabela.xml" -w -S"nekiServer" -U"user" -P"password" Opcija -w radi ono sto i pise u helpu: Performs the bulk copy operation using Unicode characters. Ono sto nije preciznije navedeno u helpu je da se kao rezultat dobija fajl koji ima encoding: UTF-16 with little-endian byte order. Ništa nije bilo navedeno po pitanju dobijanja fajla koji je u UTF-8 formatu. U potrazi za rešenjem na netu na par foruma predloženo je da se u pozivu bcp komande koriste opcije -c -C65001 uz napomenu da se tako dobija fajl koji nema BOM (byte-order mark). Meni ova opcija nije radila jer se stalno dobijala poruka da ne postoji kodna strana 65001. Umesto 65001 probano je sa opcijom -c C"UTF-8" i to je u prvi mah delovalo da radi jer se ne javlja pomenuta greška i kreira se fajl koji je izgleda u UTF-8 formatu ali je problem nastao ukoliko eksportujem sadržaj koji sadrži naša slova (š, ć, ž...). Za takav fajl UltraEdit nije prijavljivao problem ali ga ipak nije prepoznavao kao UTF-8 dok je XMLSpy prijavljivao da u dokumentu postoje karakteri koji ne bi trebalo da se prisutni u dokumentu koji je u utf-8 formatu. Moguće je da je to sve imalo veze sa onim što se ne kreira onaj BOM, ne znam, u svakom slučaju opcija nije radila to što mi je trebalo. Na kraju, problem za sada razrešavam tako što se transformacija u UTF-8 radi posle kreiranja xml fajla i to uz pomoć TECkit toolkita koji je DragiTata predložio (još jednom hvala za link ). Rešenje: Ceo eksport sada ide u dva koraka: U MSSQL-u: bcp "select * from nekaTabela" queryout "C:\temp\InputFileUTF16.xml" -w -S"nekiServer" -U"user" -P"password" a zatim se iz komandne linije poziva txtconv.exe sa sledećim opcijama: c:\temp\txtconv -if utf16le -of utf8 -i InputFileUTF16.xml -o OutputFileUTF8.xml Rezultujuci fajl (OutputFileUTF8.xml) je u korektnom utf-8 formatu i sa kreiranim BOM. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Sinhronizacija baza [MSSQL 2005] | dee | SQL baze podataka - Sponzor: Baze-Podataka.net | 9 | 13. 09. 2009. 15:48 |
problem sa MSSQL konekcijom | _korso_ | SQL baze podataka - Sponzor: Baze-Podataka.net | 5 | 03. 01. 2008. 12:32 |
C# & Mssql | oliver78 | Programiranje | 3 | 08. 03. 2007. 16:27 |
MSSQL 2005 Express i UTF-8 | Nick | SQL baze podataka - Sponzor: Baze-Podataka.net | 4 | 18. 09. 2006. 23:06 |
Eksport i import MySQL baze | Dragan Babić | SQL baze podataka - Sponzor: Baze-Podataka.net | 18 | 13. 08. 2006. 13:28 |