Strona 1 z 1

ASCII krzaki

: 17 mar 2020, 17:44
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.

Re: ASCII krzaki

: 17 mar 2020, 23:55
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

Re: ASCII krzaki

: 18 mar 2020, 10:01
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.

Re: ASCII krzaki

: 18 mar 2020, 10:08
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.

Re: ASCII krzaki

: 18 mar 2020, 10:23
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ć.

Re: ASCII krzaki

: 18 mar 2020, 10:42
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.

Re: ASCII krzaki

: 18 mar 2020, 12:20
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

Re: ASCII krzaki

: 18 mar 2020, 13:00
autor: STAY_PJE
Do tego zmierzam.
Tylko potrzebuję właśnie tę listę nietolerancyjnych znaków popartych doświadczeniem. Stąd mój post.

Re: ASCII krzaki

: 18 mar 2020, 18:13
autor: Korodak
Hej,

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

Błędy zostały wyeliminowane.

Pozdrawiam.