środa, listopada 03, 2010

Moj TechNet

Jest w MS Technet wiele ciekawych rzeczy:

  1. SpicIE - Simple Plug-In Creator for Internet Explorer
  2. Obrazy wirtualnych środowisk XP i Vista do testowania IE8/IE7
  3. Ciekawa biblioteka w VFP - http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater
  4. Tworzenie raportów z wyjściem do PDF – foxypreview

Kodowanie w aplikacjach klienckich korzystających z internetu

Kodowanie ma duże znaczenie ponieważ w systemie operacyjnym MS mamy konkretne kodowanie znaków diakrytycznych tzw. stronę kodową np. 1250 (polska) a w internecie przyjęto standard unicode. Sprawę pogarsza fakt, że na serwerach z którymi aplikacja może się komunikować jest też swój indywidualny system kodowania znaków. Mamy więc trzy miejsca w których znaki są transformowane:

  • lokalnie u klienta
  • w medium pośredniczącym czyli Internecie
  • zdalnie na serwerze (i dodatkowo jeszcze trzeba uwzględnić kodowanie w bazie)

Należy wybrać wspólną bazę. Moja propozycja w przypadku VFP jest taka:

  • Wysyłanie danych do serwera - lokalnie PRZED wysłaniem łańcucha znaków do serwera należy go przekodować z DBCS (natywne przedstawienie znaków diakrytycznych właściwe tylko w VFP) na UNICODE (korzystając z funkcji STRCONV z parametrem 5), następnie zakodować UNICODE do standardu przesyłania znaków w Internecie czyli UTF-8 (ta sama funkcja ale z kodem 10). Dalej należy zapakować to w kod base64 aby uniknąć przekłamań (jest to ważne w przypadku PHP). Tak przygotowana paczka trafia na serwer, w moim przypadku PHP na którym jest kodowanie iso-8859-2. Tutaj należy robejcować ładunek (base64_decode) i mamy już po stronie serwera dane w kodzie UTF-8. Teraz wystarczy je przesłać na stronę z charset=utf-8 i wszystko jest dobrze. Gdybyśmy chcieli zapisać te dane do bazy to musimy je przekodować do kodowania przyjętego  w bazie np. iso-8859-2, ale to można zrobić odpowiednimi skryptami już na serwerze.
  • Odbieranie znaków z serwera – tutaj działa wbudowana inteligencja VFP – sam się domyśla jakie jest kodowanie tego co przyszło. Należy jednak pamiętać, że tworząc np. skrypt w PHP w edytorze musimy zadbać aby on zapamiętał plik w kodzie jaki obowiązuje na serwerze