Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Kodowanie do UTF-16 - jak ?
Forum PHP.pl > Forum > PHP
kaem
Witam,
jak poprawnie zakodować tekst to UTF-16? Muszę to zrobić tak: " Wiadomość musi być kodowana w UTF-16 a wartość datacoding value musi być 8(0x08). (Wartość DCS - 8)". Co to jest ten datacoding value i gdzie to mogę ustawić?

Problem dotyczy polskich znaków. Próbowałem tak: mam np. tekst $str = 'AMBaftSĄŻŹĆŃÓŁąśźżźćłó';
i wywołując różne funkcje mam takie wyniki:

mb_convert_encoding: AMBaftSĄŻŹĆŃÓŁąśźżźćłó // mb_convert_encoding($str, 'UTF-16');
mb_internal_encoding: ISO-8859-1 //var_dump(iconv_get_encoding($str))
iconv_get_encoding: bool(false)
a jak spróbuje zrobić
  1. iconv(iconv_get_encoding($str), 'UTF-16', $str);
to wywala mi "Notice: iconv() [function.iconv]: Detected an illegal character in input string in D:\www\htdocs\projekt\admin\modules\Sms\views\TestSuccessView.class.php on line 26
ţ˙AMBaftSÄ 9ť9Ä 9"

W sms zamiast polskich znaków mam alb puste miejsca, albo znaki zapytania albo jakiś dziwne znaczki.
Proszę o pomoc.
skowron-line
Zaglądałeś do manuala żeby zobaczyć jak funkcja iconv_get_encoding działą questionmark.gif
Kod
<pre>
<?php
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");
var_dump(iconv_get_encoding('all'));
?>
</pre>
kaem
dobra, tam był błąd, który poprawiłem ale i tak jak robię:
  1. echo iconv('ISO-8859-1', 'UTF-16', $str);
to wyświetla mi ţ˙AMBaftSĽŻĆŃÓŁšœŸżŸćłó.
Najbardziej mnie interesuje jak zrobić to zgodnie z tą specyfikacją: " Wiadomość musi być kodowana w UTF-16 a wartość datacoding value musi być 8(0x08). (Wartość DCS - 8)". Wie ktoś może jak to zrobić?
Crozin
1. Czy w SMS-ach nie używa się przypadkiem UCS2 (nie UTF-16)?
2. DCS informuje o tym jak jest zapisana wiadomość (jakie kodowanie), wartość 8 wskazuje na 16-bitowe kodowanie. Powinieneś to pewnie umieścić jako któryś tam z kolei nagłówek wiadomości.
kaem
1. Informacje o tym, że kodowanie ma być w utf16 i datacoding dostałem od nich w mailu razem z danymi do logwania.
2. niestety na razie nie widzę, żeby była możliwość ustawienia tego w metodach klasy, którą udostępnili do wysyłania sms;/ Natomiast już wewnątrz kodu klasy zauważyłem, że te parametry są ustawione na sztywno... No nic, jutro jeszcze się do nich odezwę o co kaman, narazie dzięki za odpowiedzi, pewnie w tym temacie jutro się odezwę. Jak ma ktoś jakieś pomysły jeszcze to chętnie przeczytam.
Pozdrawiam.
Crozin
IMO poszukaj jakiejś specyfikacji / opisu protokołu SMS. Będzie to raczej niezbyt obszerna lektura, a rozwieje wszelkie wątpliwości. wink.gif
kaem
Dobra, po mailu od sitmobile okazało się że dla nich to rybka czy wyślę w UTF-16 czy UCS-2 (zresztą to jest prawie to samo). Natomiast problem miałem z ustawieniem wartości data coding, o której pisali ale nieprecyzyjnie o co kaman, tym bardziej, że w polskiej wersji dokumentacji akurat ten rozdział o kodowaniu wiadomości jest ucięty... Dopiero w ang. wersji znalazłem co chciałem... Ale działa.

BTW: zastanawia mnie jedna rzecz (zaznaczam, że jestem cienki z całego zagadnienia kodowania znaków):
dlaczego przy stosowaniu mb_check_encoding dla różnych typów kodowania, mam zawsze zwracane true(1)?

mb_check_encoding(sms ĄŻŹĆŚĘÓŁłóżźćńŃąśę asdas das wqe, 'UTF-8') -> 1
mb_check_encoding(sms ĄŻŹĆŚĘÓŁłóżźćńŃąśę asdas das wqe, 'ISO-8859-1') -> 1
mb_check_encoding(sms ĄŻŹĆŚĘÓŁłóżźćńŃąśę asdas das wqe, 'UTF-16') -> 1
mb_detect_encoding(sms ĄŻŹĆŚĘÓŁłóżźćńŃąśę asdas das wqe, 'UTF-8,ISO-8859-1,UCS-2,UTF-16') -> UTF-8
Crozin
mb_check_encoding sprawdza jedynie czy dany ciąg bajtów może zostać w ogóle użyty w danym kodowaniu. Przykładowo dla kodowania UTF-16BE:
Kod
0041 006C 0061 - OK, "Ala"
0041 006C 00   - nie OK, nieprawidłowo ilość bajtów (nieparzysta)
0041 D821      - nie OK, po bajtach "D821" musi występować kolejna para (Unicode surrogate pair)
kaem
Dzięki, źle zrozumiałem opis w manualu smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.