Pogledajte određenu poruku
Staro 10. 09. 2008.   #9
nenana
član
Certified
 
Datum učlanjenja: 20.08.2008
Poruke: 58
Hvala: 21
144 "Hvala" u 15 poruka
nenana is on a distinguished roadnenana is on a distinguished road
Default

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.
nenana je offline   Odgovorite uz citat