Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 14853|Odpowiedź: 0

[Źródło] Problemy z prefiksami BOM występowały podczas odczytu plików Unicode (UTF-8 itp.) w Javie

[Skopiuj link]
Opublikowano 14.01.2019 16:26:17 | | |
Problem z pierwszymi znakami BOM podczas odczytu plików Unicode (UTF-8 itp.) w Javie oraz sposoby ich obsługi

Pliki tekstowe utworzone w edytorze tekstu w Windows będą miały ID BOM dodany do nagłówka pliku (pierwszy znak), jeśli zdecydujesz się zapisać je w formacie Unicode, takim jak UTF-8.

Ta identyfikacja nie jest usuwana podczas odczytu pliku w Javie, a String.trim() nie może zostać usunięty. Jeśli użyjesz readLine() do odczytania pierwszej linii i zapisania jej w Stringu, długość Stringu będzie o 1 większa niż to, co widzisz, a pierwszy znak to ten BOM.

Może to powodować pewne problemy, na przykład podczas czytania pliku ini, jeśli chcesz sprawdzić, czy pierwsza linia zaczyna się na "[", nie możesz poprawnie ocenić.

Na szczęście, gdy Java odczytuje pliki Unicode, jednolicie zmienia BOM na "\uFEFF", więc można go rozwiązać ręcznie (po ocenie, użyj substring() lub replace(), aby usunąć ten BOM):

JednakTo podejście nie jest idealneJeśli wygenerowany plik jar działa na Windowsie, problem nadal występuje. Ostatecznym obejściem jest użycie BOMInputStream udostępnionego przez apache commons io:

Czym jest BOM?


BOM = Znak Kolejności Bajtów
BOM to zalecana metoda oznaczania kolejności bajtów w specyfikacji Unicode. Na przykład dla UTF-16, jeśli odbiornik otrzyma BOM FEFF, oznacza to, że strumień bajtów jest Big-Endian; Jeśli FFFE zostanie odebrane, oznacza to, że strumień bajtów jest Little-Endian.
UTF-8 nie wymaga BOM do wskazywania kolejności bajtów, ale może być używany do wskazania "Jestem zakodowany UTF-8". Kodowanie UTF-8 w BOM to EF BB BF (co widać po otwarciu tekstu za pomocą UltraEdit i przełączeniu na szesnastkowe). Jeśli odbiornik otrzyma strumień bajtów zaczynający się od EF BB BF, wie, że to kodowanie UTF-8.





Poprzedni:Rozwiązania Jacksona dotyczące typowych błędów
Następny:Barman do oprogramowania do kodowania kreskowego!
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com