Konwersja PLIKU z Ansi na UTF-8

0

Mam se w Delphi 7 string, chce go zapisać do PLIKU kodowanego jako UTF-8 i NIE chodzi mi tu o funkcję ANSIToUTF8() ponieważ ona konwertuje znaki, ja chcę zapisać string do pliku, tak aby np. Notepad++ rozpoznawał plik jako właśnie UTF-8.

0

Moim zdaniem najprościej jest zrobić następująco:

Plik docelowy jest plikiem zdefiniowanym jako "File Of Char" lub "File Of Byte" co właściwie na jedno wychodzi, różnica tylko taka, czy do pliku wrzuca się dane ze zmiennej typu Char, czy typu Byte, ale jedna i druga wersja będą prawie takie same w implementacji.

Na początku pliku musisz wpisać trzy znaki (bajty) o wartościach kolejno 239, 187, 191, potem dopiero właściwy tekst

Ze stringa możesz pobierać pojedyncze znaki, wykonasz pętlę For od 1 do długości napisu, który masz typu String

Algorytm Ansi->UTF-8 jest prosty, opisany nawet w Wikipedii (ale nie gwarantuję poprawności Wikipedii, najlepiej samemu sprawdzać)

Jak pobiera się znak, którego odwzorowanie w UTF-8 zajmuje kilka bajtów, to wszystkie bajty po kolei będą wrzucone do pliku przy jednym przebiegu pętli For.

0

UTF8Encode(jakisString);

1

Czesc Sam niedawno mialem z tym problem i dlugo sie w sieci naczytalem jak to rozwiazac. Bo program wczytywal mi krzaczki z pliku tekstowego. Przestawialem Charset dla RichEdit i nic. A tekst w notatniku wygladal dobrze. Mozna sprawdzic w jakiej stronie kodowej jest tekst klikajac zapisz w notatniku. U mnie bylo UTF-8. Delphi 7 ma mnostwo wlasnych procedur do konwersji tekstu. Mi potrzebna byla UTF8ToAnsi(tekst). Dziala super. Tylko trzeba od razu wrzucic caly tekst a nie linijka po linijce w petli.
W waszym przypadku bedzie to czarodziejskie zaklęcie AnsiToUTF8.
Powodzenia.

0

Trochę się plączesz. Przecież ANSIToUTF8 robi dokładnie to o co pytasz: podajesz zwykłego stringa i dostajesz stringa przerobionego na UTF-8, którego możesz zapisać do pliku. Na początku pliku możesz dodać bajty $EF, $BB, $BF aby programy łatwiej plik rozpoznały jako UTF-8, ale nie jest to wymagane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1