ugrás a tartalomhoz

Karakter kódolás gond (RTF, MSSQL)

TIV · 2010. Jún. 3. (Cs), 09.32
Sziasztok!

Egyszerűen meghalt a tudományom, kérlek segítsetek. Linux szerver, ODBC (FreeTDS driver)-el kapcsolódok egy távoli MSSQL szerverre. Az ottani karakterkódolásokat nem ismerem. Tárolj eljárást hívok, kapom az adatokat. UTF-8 van beállítva a freetds.conf-ban a client charset-nél, UTF-8 a lapok karakterkódolása és ezt mutatja a firefox is. minden mezőt sikeresen ki tudok írni, jók az ékezetek. van azonban egy mező, aminek tudni lehet, hogy RTF fájl a tartalma. Sajnos ez így néz ki firefoxban:

{�\�r�t�f�1�\�a�n�s�i�\�d�e�f�f�0�{�\�f�o�n�t�t�b�l�{�\�f�0�\�f�n�i�l�\�f�c�h�a�r�s�e�t�2�3�8� �M�S� �S�a�n�s� �S�e�r�i�f�;�}�}� � �\�v�i�e�w�k�i�n�d�4�\�u�c�1�\�p�a�r�d�....

Az RTF ANSI kódolást használ, ez viszont úgy néz ki, mintha UTF-8-as lenne. Egyszerűen nem tudom belőle eltüntetni a kérdőjeleket. Próbáltam azt, hogy kivettem a freetds-nél az UTF-8at, de nem segített. Az utf8_decode() érintetlenül hagyja, ha ráuszítom. Az iconv-ben is próbáltam már utf-8 ról ansira, asciiire, iso-8859-1re, fordítva, de semmi. vagy így jelenik meg, vagy sehogy. van valakinek ötlete, hogy lehetne rávenni a műküdésre? az mb_detect_encoding ASCII-t válaszol vissza ha ráküldöm.

Köszönöm!
 
1

bináris

TIV · 2010. Jún. 3. (Cs), 10.07
hoppá, nem szövegként, hanem bináris állományként tárolták!
2

Unicode-16

bonga · 2010. Jún. 3. (Cs), 10.55
Nekem ez ránézésre nem UTF-8, hanem Unicode-16... Próbáld meg az iconv('UTF-16LE', 'ISO-8859-1', $rtf); hívást, szerintem ez segíteni fog.
3

igazad van

TIV · 2010. Jún. 4. (P), 08.34
igazad lett, közben én is rájöttem nagy kínok árán. a megoldás végül ez lett:
odbc_binmode($result, ODBC_BINMODE_RETURN);
$image = iconv('UCS-2', 'UTF-8', odbc_result($result, 10));
Az $image változót fájlba téve megkaptam a szabványos RTF fájlomat. Az odbc_result($result, 10) adja vissza MSSQL-től az RTF fájlt.

Köszönöm a segítséged!