Поддерживать двоичное представление при декодировании недопустимого UTF-8 в Swift - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу преобразовать Data в String с использованием кодировки utf8, независимо от того, содержит ли Data недопустимые символы:

var cafe = "Café".data(using: .utf8)!
cafe.count // 5
cafe.removeLast() // remove the "e", making parts of the string invalid utf8
cafe.count // 4
let s = String(decoding: cafe, as: UTF8.self) // "Caf�"
s.data(using: .utf8)?.count // 6

В приведенном выше коде я преобразую недопустимый utf8 в String, но преобразованная строка содержит данные, отличные от исходного двоичного представления. Есть ли способ сделать строку простым представлением данных?

РЕДАКТИРОВАТЬ: цель состоит в том, чтобы иметь возможность искать и заменять (и выполнять регулярные выражения) в двоичном файле (например, скомпилированный исполняемые файлы с разделом, являющимся строками). Скомпилированные исполняемые файлы, скорее всего, содержат байты, которые нельзя кодировать как utf8.

1 Ответ

0 голосов
/ 04 апреля 2020

Есть ли способ, чтобы строка представляла собой простое "представление" данных?

Нет. Swift String предназначен для хранения последовательности допустимых кодовых точек Unicode. Если вы хотите сохранить исходное двоичное представление , вам лучше хранить данные.

Что вы действительно хотите делать с такими неверными данными?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...