/ / Postać wygląda jak ASCII 63, ale nie jest, więc nie mogę jej usunąć - vb.net, ascii, non-ascii-characters

Postać wygląda jak ASCII 63, ale nie jest, więc nie mogę jej usunąć - vb.net, ascii, non-ascii-characters

Czytam tekst z pliku tekstowego. Pierwszym ciągiem, który musi odczytać plik tekstowy, jest "Algood" i zwróć uwagę na spaaaaace. W Notatniku, wygląda na to, że w tym łańcuchu występuje spaaaaace, ale nie jest tak. Kiedy testuję 6. (indeks bazujący na zera) w QuickWatch Visual Studio, pojawia się on jako:

"�"c

Kiedy używam Asc funkcja do uzyskania kodu ASCII, to mi to mówikod ASCII to 63. 63 to znak zapytania. Ale kiedy testuję, czy łańcuch zawiera ASCII 63, testuje fałsz. Wygląda więc na to, że ciąg zawiera znak z kodem ASCII 63, tyle tylko, że nie zawiera innego znaku, który sprawdza się jako kod ASCII 63. Jest to problem: nie mogę usunąć znaku, jeśli nie wiem, jak to nazwać, mogę usunąć ostatni znak, ale nie każdy ciąg w pliku tekstowym zawiera tę postać.

wprowadź opis obrazu tutaj

Pytanie brzmi: czym jest ta postać, jeśli nie jest znakiem zapytania, i jak mogę ją jednoznacznie zidentyfikować, aby ją usunąć?

Odpowiedzi:

6 dla odpowiedzi № 1

To jest Znak zastępczy Unicode, U + FFFD, aka ChrW(&HFFFD).

Nigdy nie używaj Asc () ani Chr (), są one starszymi funkcjami VB6, które nie obsługują Unicode. Przekazanie fantazyjnego kodu Unicode do Asc () zawsze daje 63, kod znaku dla "?"c, alias "Nie mam pojęcia, co mówisz" dokładny taki sam pomysł jak"�"c ale zamiast tego używają kodu ASCII.

Oglądanie Czarnego Diamentu Śmierci jest zawszezłe wiadomości, coś poszło nie tak, gdy łańcuch został przekonwertowany z bazowych wartości bajtów. Ponieważ niektóre wartości bajtów nie dają prawidłowego znaku. Czego tak naprawdę powinieneś szukać, zawsze chcesz uniknąć GIGO. Garbage In Garbage Out to brzydki problem z korupcją danych, który nie ma zwycięzców, tylko ofiary. Ty.