Если строка содержит символы, которые не существуют в ASCII, то вы ничего не можете сделать, потому что, ну, эти символы не существуют в ASCII.
Если строка содержит только символов, которые do существуют в ASCII, то вам ничего не нужно сделать, потому что строка уже в кодировке ASCII: UTF-8 был специально разработан для обратной совместимости с ASCII таким образом, чтобы любой символ в ASCII имел ту же самую кодировку в UTF-8, что и в ASCII, и что любой символ, который не в ASCII, может никогда иметь кодировку, которая является действительной ASCII, т.е. будет всегда иметь кодировку, которая недопустима в ASCII (в частности, любая не - Символ ASCII будет закодирован как последовательность из 2 - 4 октетов, каждый из которых имеет установленный старший бит, т. Е. Имеет целочисленное значение> 127).
Вместо того, чтобы просто пытаться преобразовать строку, вы можете попытаться транслитерировать строку. Большинство языков на этой планете имеют некоторую форму схемы транслитерации ASCII, которая, по крайней мере, делает текст несколько понятным. Например, меня зовут «Jörg», а его транслитерацией ASCII будет «Joerg». Имя создателя языка программирования Ruby - "ま つ も と ゆ き ひ ろ", а его транслитерацией ASCII будет "Мацумото Юкихиро". Тем не менее, обратите внимание, что вы потеряете информацию. Например, немецкая sz-ligature транслитерируется на «ss», поэтому слово «Maße» (измерения) транслитерируется на «Masse». Тем не менее, «масса» (масса, в смысле физика, а не христианина) составляет и слово. В качестве другого примера, у турецкого языка есть 4 "i" (маленький и большой, с точкой и без точки), а в ASCII только 2 (маленький с точкой и большой буквы без точки), поэтому вы либо потеряете информацию о точке, либо нет была заглавная буква.
Таким образом, способ only , который не потеряет информацию (другими словами: поврежденные данные), заключается в том, чтобы каким-то образом кодировать не-ASCII-символы в последовательности символов ASCII. Существует много популярных схем кодирования: ссылки на объекты SGML, MIME, escape-последовательности Unicode, Τ & Epsilon; & Chi; или LaΤ & Epsilon; & Chi ;. Таким образом, вы будете кодировать данные, когда они поступают в вашу систему, и декодировать их, когда они покидают систему.
Конечно, самым простым способом было бы просто исправить вашу систему.