Co to za kodowanie ??

0

Witam od pewnego czasu próbuje to ugryść ale mi nie wychodzi.
mam plik po podglądzie w hex jest coś takiego

77 20 61 20 72 20 74 20 6F 20 5B 01 07 01

tam powino być słowo wartość

5B i 01 jak by zamienił miejscami czyli wyszło by 0x015B było by ś w unicode, ale jak koduje pod unicode to mam japońskie krzaczki, jak to można przerobić na ASCII, mam taki cały plik, nie chciał bym od podstaw robić kodowania bo nie znam znaczenia wszystkich pól.

Sugerując się polskimi ogonkami mi to wygląda na Unicode
Rozszerzony łaciński A
Ale jak to przekonwertować do ASCII

Jak to przełożyć na ASCII
Za wszystkie pomysłu i sugestie będę bardzo wdzięczny..

Z Góry dziękuję za pomoc.

0

Jest to LittleEndian UTF-16, przy czym, nie wiem dlaczego, standardowe znaki (z przedziału 0x00 - 0x7F) mają starszy bajt równy 0x20, a powinno być 0x00. Po zamianie 0x20 na 0x00 wychodzi słowo "wartość". A chińskie znaki masz dlatego, bo odczytałeś to jako BigEndian UTF-16.

0

Jak to ugryźć w C#, próbuje też zamienić im wszystkim kolejność i zobacze co wyjdzie, napisz mi jak to przekonwertować na ASCII czysty w C#.

0

Zależy na co chcesz konwertować. Jeśli na stringa, to:

string result = Encoding.Unicode.GetString(byteArray);

Jeśli zaś chcesz konwertować na tablicę typu byte, to:

byte[] ascii = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, byteArray);

gdzie byteArray to powyższa tablica, ale już z zamienionymi parzystymi elementami z 0x20 na 0x00. Zależnie od wymaganej strony kodowej Encoding.ASCII trzeba zamienić na np. Encoding.GetEncoding(852) dla strony kodowej IBM-852. Encoding.ASCII używa domyślnej strony kodowej systemu.

0

Zamieniłem wszystkie wystąpienia 0x20 na 0x00 przy kodowaniu do unicode dalej mam japońskie znaki, kurde myślałem że da się to jakoś przekonwertować a nic nie wychodzi.

Próbowałem jak kolega radził ale mimo wszystko mam krzaczki.

0

Ale zamieniałeś kolejność bajtów przed konwersją, czy nie? Dla takiej kolejności bajtów jak podałeś w pierwszym poście powinieneś użyć Encoding.Unicode.GetString(), zaś dla odwróconej powinieneś użyć Encoding.BigEndianUnicode.ToString(). Tyle, że nie ma sensu odwracać kolejności bajtów przed konwersją. Ale na wszelki wypadek spróbuj również konwersji z użyciem Encoding.BigEndianUnicode.ToString(), bo być może podałeś tablicę przesuniętą o jeden bajt i kodowanie jest w BigEndian pomimo tego, że na podstawie tablicy, którą podałeś, wygląda to na LittleEndian.

0

BTW. Nie zwróciłem wcześniej na to uwagi, ale jeśli czytasz plik tekstowy zakodowany w Unicode, to te wszystkie kombinacje są zbędne. Jeśli plik jest zwykłym plikiem tekstowym i zawiera BOM (vide -> wikipedia), to odczyt w .NET jest banalnie prosty:

StreamReader reader = new StreamReader("plik_unicode.txt", true);
string file_content = reader.ReadToEnd();

Jeśli nie zawiera BOM, to znając kodowanie można odczytać go w prawie identyczny sposób:

StreamReader reader = new StreamReader("plik_unicode.txt", Encoding.Unicode);
string file_content = reader.ReadToEnd();

Wystarczy w konstruktorze StreamReader-a podać odpowiednie kodowanie.

0

wysyłam ci linka, spakowałem 2 pliki, jeden przed przeróbką 2 po przeróbce tak jak mówiłeś 0x20 na 0x00

Tu jest link spakowane rarem. http://wyslijplik.pl/download.php?sid=vG5F0CS5

Ja to otwieram sobie programem nazywa się AkelPad - w nim są różne kodowania.
Link do programu AkelPad http://akelpad.sourceforge.net/en/download.php

A hex który używam to 010 Editor http://www.010editor.com/

Sprawa wygląda tak, w normalnej formie nie da się tego żadnym kodowaniem ruszyć, jak zmieniam bajty tak jak napisałeś to otwiera mi, mam polskie czcionki lecz robią się niektóre linie po japońsku sam zobacz.

Dziękuję ci za pomoc.

0

O, teraz wszystko jest jasne. Plik ten został nieprawidłowo zapisany. Został po pierwsze otwarty/odczytany jako plik tekstowy z kodowaniem ANSI, a nie Unicode i jako taki został też zapisany. W takim przypadku znaki o kodzie ASCII 0x00 pojawiają się jako spacje i przy zapisie pliku są zapisywane kodem 0x20 czyli kodem ASCII odpowiadającym spacji. Poza tym plik na początku nie posiada BOM-u, lecz dwa BOM-y znajdują się w innych miejscach pliku (FF FE - wskazuje na UTF-16 LittleEndian), co wskazuje, że kilka plików Unicode zostało połączonych, lecz nie w trybie Unicode, tylko w trybie ANSI. Dodatkowo w niektórych miejscach brakuje pojedyńczych bajtów, co również jest efektem próby odczytu, a następnie zapisu pliku jako pliku z kodowaniem ANSI i dlatego nawet po podzieleniu pliku przekonwertowanego z 0x20 na 0x00 kodowanie w niektórych miejscach się rozsypuje.

0

Dzięki, zaraz załatwie orginalne pliki, ponieważ już takie dostałem, a robie wszystko z pod hex wiec nie ma możliwości zmienić kodowania. jak będę miał orginalne pliki będę pisał.
Jak narazię dziękuję.

0

Wszystko jasne, kodowanie dobre mi wskazałeś, bom jest w dobrym miejscu, w właściwym.

Ten plik to pak różnych plików, dlatego niektóre informacje są w ansi a inne kodowane w UTF-16 FE.

Zostało mi jedynie rozpracować format by to rozpakować i będzię ok. dzięki za pomoc..

Jak byś też chciał posiedzieć nad tym to kliknij do mnie a wyjaśnie ci sprawę..

Pozdrawiam.

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