2010-02-27 5 views

ответ

0

Я предполагаю, что по ASCII вы имеете в виду CP1252 или другой 8-битный набор символов (ASCII - всего 7 бит и он напрямую совместим с UTF-8, не требуется никакого преобразования). Стандартный C++ не может этого сделать. Вам нужно, например, Glibmm, Qt, iconv или WINAPI для этого.

+1

Это большое предположение. CP1252 очень специфичен для платформы, и в этом вопросе нет никаких признаков платформы. –

+0

Вот почему я сказал «или другое». Однако, похоже, что пользователи Windows больше всего не знают о наборах символов. Одним из больших преимуществ использования CP1252 при преобразовании из 8 бит является то, что он также совместим с ISO-8859-1 (но не наоборот). – Tronic

+1

Какой странный комментарий. Кодовая страница 1252 - это очень специфичная для Windows кодировка. Говоря о том, что пользователи Windows «самые неосведомленные» о конкретных деталях реализации Windows, erm, не знают. –

5
std::string ASCIIToUTF8(std::string str) { 
    return str; 
} 

Каждый символ ASCII имеет такое же представление в UTF8, поэтому преобразовать нечего. Конечно, если входная строка использует расширенный (8-разрядный) набор символов ASCII, ответ более сложный.

+0

Могу ли я преобразовать строку ASCII в строку Unicode. – Eduardo

+0

Термин «расширенный ASCII» в основном использовался только для CP437 (или других MS- DOS), которая почти вымерла в эти дни. – Tronic

+0

@Tronic: Правда, но в любом случае любой 8-битный набор символов, являющийся расширением ASCII, представляет собой расширенный набор символов ASCII. :) – jalf

2

ASCII является семибитным кодированием и идентично отображает кодировку UTF-8 подмножества символов, которые могут быть представлены в ASCII.

Короче говоря, нечего делать. Ваша строка ASCII уже действительна UTF-8.

Смежные вопросы