Niby C++, ale jednak CLI, to pozwoliłem sobie tu umieścić temat.
Koduję sobie szyfrowanie algorytmem Vigenere'a (wiki powinna wiedzieć o co chodzi, dla zainteresowanych ;) ) i wszystko działa ok, tak szyfrowanie, jak i deszyfracja. A przynajmniej działa ok dla pewnych plików... Jeśli plik tekstowy, który chcę zaszyfrować, jest w kodowaniu UTF-8, wszystko jest bez problemu, plik po deszyfracji jest w 100% zgodny z plikiem przed szyfrowaniem, czyli ok.
Jednak kiedy próbuję zaszyfrować plik kodowany ANSI, pojawia się problem. Plik jest czytany przez StreamReadera jako plik UTF-8, chociaż zapisany jest w formacie ANSI. Co za tym idzie plik wynikowy też leci do UTF-8, co powoduje róznice w bajtach między plikiem źródłowym a końcowym.
I kombinuję jak to załatwić, żeby działało, ale pomysłów mi brak, a sprawa powoli staje się nagląca.
Aby utworzyć plik wynikowy o takim samym kodowaniu jak plik źródłowy posługuję się taką konstrukcją:
input = gcnew StreamReader(inputName);
currentChar = input->Read();
output = gcnew StreamWriter(outputName, false, input->CurrentEncoding);
Po readzie ze streamReadera powinno już być znane kodowanie. Sprawdzałem, wychodzi utf-8, mimo, że plik zapisany jest w ANSI. A skoro tak, to plik wynikowy też powinien być w ANSI, a wychodzi w utf.
Inna sprawa, że wydaje mi się to lekko pod górkę, takie kombinowanie ze stworzeniem pliku wynikowego o takim samym kodowaniu jak wejściowy, ale cóż, działa dla unicoda, działa dla utf, działa dla Unicoda Big Endian (chociaż wyświetla że to Unicode).
Z przyjemnością przyjmę jakąś dobrą radę, jak sobie z tym poradzić.
Z góry dzięki
Pozdro