ASCII krzaki

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

ASCII krzaki

Post autor: STAY_PJE »

Często korzystamy z różnego rodzaju narzędzi wymiany danych z dostawcami i odbiorcami. Głównie dotyczą one wymiany danych z bankiem za pomocą Webservice, wymiany dokumentów przez EDI oraz synchronizacji danych ze sklepami internetowymi. Wymiana sprowadza się najczęściej do transmisji jakichś plików, zwykle w formacie xml.

Czasem zdarza się problem - występowanie niedozwolonych znaków w tych plikach. Mogą to być na przykład znaki tabulacji, nowej linii, itp. Raz na jakiś czas pojawia się jakiś nowy nieznany mi znak, którego również jakiś mechanizm nie przepuszcza.

Pytanie do Was- czy znacie jakąś listę zakazanych znaków ASCII, których należy bezwzględnie unikać w transmisji danych?

Zmierzam do stworzenia jakiegoś narzędzia, które będzie mi czyściło te znaki w danych.

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: ASCII krzaki

Post autor: elmiq »

Nie rozumiem do końca pytania. To co jest, bądź nie jest akceptowalne zależy w uproszczeniu od tego co akceptujemy na wejściu (inny program) oraz od strony kodowej pliku który parsujemy (oczywiście język programowania też ma swoje znaki specjalne dla ciągów). Narzędzie, powiedzmy w C#, może rozpoznawać stronę kodową i w zależności od niej wycinać/zamieniać znaki, ale samo ASCII to raptem 128, bądź w rozwinięciu 256 znaków i nie ma tu większej filozofii. W przypadku XL, ze względu na jedno środowisko bazodanowe (na razie), można to zamieniać nawet na poziomie serwera SQL poprzez REPLACE + CHAR. W takim przypadku być może zainteresuje Cię funkcja STRING_ESCAPE, bądź po prostu możesz mieć coś swojego podmieniającego znaki, albo wyświetlające je w takiej formie, że zawsze je widać. Jeśli dobrze pamiętam, to lata temu opisałem coś takiego na blogu, bo XL miał w którejś wersji tendencję do wstawiania enter-a w niektóre pola tekstowe i był kłopot z porównywaniem ciągów. Jeśli natomiast robisz coś w środowisku Oracle/Mongo/PostgreSQL/bazy danych innego typu (zakładam, że nie, bo to raczej nie to forum), to znaki specjalne będą się zmieniać w zależności od obszaru w którym się poruszasz. Co konkretnie Cię interesuje?

Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: ASCII krzaki

Post autor: STAY_PJE »

Chyba ten STRING_ESCAPE załatwi mi sprawę. Dzięki, nie znałem tej funkcji.
Potrzebuję przeczyścić dane w bazie XL-a, głównie w zakresie kartotek kontrahentów, adresów i kodów towarów. W celu usunięcia potencjalnych problemów z opisaną wyżej transmisją. W szczególności na gorąco to miałem problem (co prawda już usunięty) z wysyłką poleceń zapłaty do ING przez webservice. W tym konkretnie przypadku pojawił się w nazwie kontrahenta znak ASCII 149.

Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: ASCII krzaki

Post autor: STAY_PJE »

Ta funkcja ma jednak zbyt ograniczone zastosowanie.
Z jednej strony nie zastępuje mi znaku, który przysporzył problemu, czyli char(148).
Z drugiej strony zastępuje prawidłowy znak cudzysłów.

CDNP_KMK
Posty: 48
Rejestracja: 15 maja 2018, 11:56
Rola: Konsultant CDN XL
Wersja: 2023
Lokalizacja: CDNP Wrocław
Kontakt:

Re: ASCII krzaki

Post autor: CDNP_KMK »

Zależnie od tego z jakimi znakami się zmagasz:
Znaki o numerach poniżej 31 - musisz obsłużyć we własnym zakresie. Mam na myśli czy taki znak ma być, czy nie ma być (10, 13, tabulator, esc, etc.).
Co do "umlautów" mam w zabawkach zapisane coś takiego, zabawa z collation:

Kod: Zaznacz cały

SELECT convert(nvarchar(max),zmiennaTekstowa COLLATE Cyrillic_General_CI_AI)
EDIT: Nie pamiętam tylko w tej chwili czy to nam załatwiało (chyba nie) znaki greckie i UTF. Z tym zawsze jest problem i trzeba pamiętać.
CDNPartners sp. z o.o. z siedzibą we Wrocławiu - Partner Roku 2017, 2018, 2019, 2022

Kazimierz Michał Karaszewski - kierownik działu ERP XL

Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: ASCII krzaki

Post autor: STAY_PJE »

a jak radzisz sobie z biała spacją char(160)? bo ta funkcja akurat sobie z nią nie radzi.
przyznam, że szukam rozwiązania, które ogarnie mi wszystkie takie dziwolągi.

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: ASCII krzaki

Post autor: elmiq »

Najprościej w takim razie zrobić funkcję skalarną, która przyjmuje na wejściu string, w swojej logice robi np. REPLACE na CHAR(160) i/lub inne znaki, a następnie zwraca string bez nich.

Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

Awatar użytkownika
STAY_PJE
Posty: 646
Rejestracja: 24 wrz 2009, 12:08
Rola: Konsultant CDN XL
Lokalizacja: Warszawa i od Helu do Wawelu
Kontakt:

Re: ASCII krzaki

Post autor: STAY_PJE »

Do tego zmierzam.
Tylko potrzebuję właśnie tę listę nietolerancyjnych znaków popartych doświadczeniem. Stąd mój post.

Korodak
Posty: 57
Rejestracja: 03 lut 2019, 21:29
Rola: Konsultant CDN XL

Re: ASCII krzaki

Post autor: Korodak »

Hej,

W innym projekcie listę znaków pobraliśmy z http://www.asciitable.com/

Błędy zostały wyeliminowane.

Pozdrawiam.

ODPOWIEDZ