«Открытый текст» может иметь несколько значений.
Одним из наиболее полезных в этом контексте является то, что это просто двоичные файлы, организованные в виде байтовых последовательностей, которые конкретная компьютерная система может преобразовать в конечный набор символов, которые она считает «текстовыми».
Второе значение, в некоторой степени связанное, - это ограничение, согласно которому указанная система должна отображать эти «текстовые символы» как символы, читаемые человеком в качестве элементов распознаваемого алфавита. Зачастую неписаным подтекстом является то, что механизм перевода - ASCII.
Третий, еще более ограничительный смысл, заключается в том, что эта система должна быть «простым» текстовым редактором / средством просмотра. Обычно подразумевается кодировка ASCII. Но, на самом деле, ОЧЕНЬ мало разницы между вами, человеком, читающим текст, закодированный в каком-то необычном формате и отображаемый проприетарной программой, и текстовым редактором VI, читающим файл в кодировке ASCII.
В контексте программирования ваша среда программирования (созданная с помощью OS + системные API + ваши языковые возможности) определяет как набор «текстовых» символов, так и набор кодировок, которые он может читать для преобразования к этим «текстовым» персонажам. Пожалуйста, обратите внимание, что это не обязательно подразумевает ASCII, английский или 8 бит - в качестве примера, Perl может изначально читать и использовать полный набор «символов» Unicode.
Чтобы ответить на ваш конкретный вопрос, вы определенно можете использовать «символьные» строки для передачи произвольных последовательностей байтов с оговоркой, которую должны применять соглашения о прекращении строк.
Проблема в том, что функции, которые уже существуют для «обработки символьных данных», вероятно, не будут иметь никакой полезной функциональности для работы с вашими двоичными данными.