Задать вопрос
@historydev
Mistkerl, drück den Knopf.

Как восстановить коды utf8 из байтов?

Перевёл строку в байты.
- Я уже научился восстанавливать числа из байтов, поэтому сделал ровно тоже самое для строки и по идее я должен был бы получить коды utf8.

Но при попытке в онлайн конверторе utf8 -> string, непонятная строка получается:
722585670778881811939328476741369856 -> r%�gx���(GgA6�V

Вывод программы:
[72, 25856, 7077888, 1811939328, 476741369856]

Я не силён в unicode, полагаю я чего-то не понимаю и поэтому неверно пытаюсь восстановить.

fn main() {

    let str_bytes = b"Hello";
    
    let data = str_bytes.iter().enumerate().fold(Vec::new(), |mut acc, (i, x)| {
        acc.push((*x as u64) * 256u64.pow(i as u32));
        acc
    });
    
    println!("{data:?}");
    
}


Мне нужен полностью ручной способ, без core и std.
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
vabka
@vabka Куратор тега Rust
ctrl+c -> ctrl+v
Чтобы преобразовать последовательность байтов последовательность code point-ов
https://doc.rust-lang.org/src/core/str/validations...

Чтобы преобразовать последовательность code point-ов в байты (вызывать в цикле)
https://doc.rust-lang.org/src/core/char/methods.rs...

Чтобы понять, почему всё происходит именно так - читай, что такое юникод и как он кодируется в utf8

А теперь душнилово

Перевёл строку в байты.
- Я уже научился восстанавливать числа из байтов, поэтому сделал ровно тоже самое для строки и по идее я должен был бы получить коды utf8.

На самом деле, мог ошибиться уже тут. В тексте вопроса ты не оставил объяснений, как ты получил свои числа.

Но при попытке в онлайн конверторе utf8 -> string, непонятная строка получается:

Онлайн конвертер ждёт байты, а не code point-ы.

Вывод программы:
[72, 25856, 7077888, 1811939328, 476741369856]

И правильное тут только первое число (я тут уже пытаюсь угадать, что ты преобразуешь Hello в числа).
Правильно будет [72, 101, 108, 108, 111]
Делаем вывод, что преобразование строки в числа у тебя кривое.

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы