Я ищу способ преобразования wstring
в простой string
, содержащий только символы ASCII. Любой символ, отсутствующий в ASCII (0-127), должен быть преобразован в ближайший символ ASCII. Если нет аналогичного символа ASCII, символ следует опустить.Как преобразовать широкую строку в ASCII
Чтобы проиллюстрировать это, давайте рассмотрим следующую строку широких:
wstring text(L"A naïve man called 晨 was having piña colada and crème brûlée.");
Преобразованный вариант Я ищу это (уведомление об отсутствии диакритики):
string("A naive man called was having pina colada and creme brulee.")
Edit:
Относительно цели : Я пишу приложение, которое анализирует Английские тексты. Входными файлами являются UTF-8 и могут содержать специальные символы. Часть моего приложения использует библиотеку, написанную на языке C, которая понимает только ASCII. Поэтому мне нужен способ «потушить» текст в ASCII, не теряя слишком много информации.
Что касается точных требований: Любой символ, являющийся диакритической версией символа ASCII, должен быть преобразован в этот символ ASCII; все остальные символы должны быть опущены. Таким образом, ı
, ĩ
и î
должны стать i
, потому что это все версии небольшой латинской буквы i. Символ ɩ
(iota), с другой стороны, визуально подобный, не является версией маленькой латинской буквы i и поэтому должен быть опущен.
* «Любой символ, отсутствующий в ASCII (0-127), должен быть преобразован в ближайший символ ASCII. Если нет аналогичного символа ASCII, символ должен быть опущен». * Это не звучит четко вообще. Является ли почти t? –
Вам просто нужно определить «похожие» и «самые близкие». Может быть, огромный стол? –
С какой целью? –