Chciałbym uzyskać konwerter działający identycznie jak tutaj: https://www.rapidtables.com/convert/number/binary-to-ascii.html chodzi o konwersje w kodowaniu w ASCII/utf-8 do kodu binarnego i na odwrót. Nie byłoby w tym nic trudnego gdyby nie fakt, że utf-8 operuje na zmiennej liczbie bitów przy zapisie co jest akurat mi potrzebne do jak najwiekszego skrócenia konwertowanego tekstu.
Przykładowo: kiedy wpisuje "a" otrzymuję "01100001"
Ale kiedy wpisuję "ą" to otrzymuję "11000100 10000101"
Oczywiście proces jest odwracalny.
Mój kod:
toBinaryRepr(str) {
const text = new TextEncoder('utf-8')
return Array.from(text.encode(str))
.map(i => i
.toString(2)
.padStart(8, '0'))
.join('')
}
Ta funkcja zamienia mi tekst na utf-8 a następnie zmienia kod binarny
let result = input.split('')
const chunks = []
result.forEach((element, index) => {
if(index % 8 === 0 || index === 0) chunks.push('')
chunks[Math.floor(index / 8)] += element
})
// chunks.forEach((element, index) => {
// const binary = element
// const charCode = parseInt(binary)
// chunks[index] = charCode
// })
const utf8decoder = new TextDecoder('utf-8');
const buffer = new Uint8Array(chunks.join(''))
console.log(buffer)
this.el.output.value = utf8decoder.decode(buffer)
// this.el.output.value = buffer
A tutaj moje próby zdekodowania tego, w zmiennej input rzecz jasna siedzi kod binarny jako string.
Nie udało mi się podpatrzeć w kodzie podanej wyżej strony jak działa dokładnie ten mechanizm. Przeszukałem również wszelkie fora i artykuły w google w poszukiwaniu rozwiązania problemu zmiennych bajtów przy konwersji. Znalazłem tylko jedną poszlakę https://stackoverflow.com/questions/29902281/node-js-convert-binary-file-to-utf8: Jednak pomijając już, że funkcja użyta tam jest zdeprecjonowana i obecnie używa się Buffer.from to i tak to nie działa.
Wiem na 100%, że jest do do zrobienia ale nie wiem jak. Może istnieje jakiś sposób by skojarzyć, że dwa następujące po sobie bajty są jednym znakiem? Albo istnieje jakieś gotowe rozwiązanie o którym nie wiem? Wszystkie przykłady jakie sprawdziłem nie uwzględniają problemu zmiennej ilości bitów.