2014-01-21 5 views
0

Мне дан текстовый файл, содержащий пару символов в строке. Я должен читать его, строчно, и применять лексический анализатор для каждого символа. Затем я пишу свой анализ в другом файле.Как читать символы ... и французские акценты из текстового файла

С помощью следующего кода, у меня нет никаких проблем с чтением французского акцента, но я понял, что символ «...» (это один символ не 3 точки) превращается в «&.

Примечание: Мой лексический анализатор должен использовать строки, поэтому я преобразовал строку wstring в строку.

wfstream SourceFile; 
ofstream ResultFile (ResultFileName); 

locale utf8_locale(std::locale(), new codecvt_utf8<wchar_t>); 
SourceFile.imbue(utf8_locale); 
SourceFile.open(SourceFileName); 

while(getline(SourceFile, wLineBuffer)) 
{ 
    string LineBuffer(wLineBuffer.begin(), wLineBuffer.end()); 

... 

Редактировать: Раймонд Чен считал, что персонаж потерян из-за моего преобразования из wstring в строку. Итак, новый вопрос: Как преобразовать из wstring в строку без преобразования символов?

Edit: Пример файл

"stringééé" 
"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" 
Identificateur1 
Identificateur2 
// Commentaire22 
/**/ 
/* 
Autre commentaire 
… 
*/ 
+0

Вы уверены, что текстовый файл, который вы указали, это UTF-8? –

+0

Является ли эллипсис потерянным в 'getline' или при преобразовании из' wstring' в 'string'? –

+0

@DidierTrosset Да, когда я открываю его с помощью notepad2, я перехожу к кодировке, и он говорит utf-8. – Dave

ответ

4

Вам нужна правильная библиотека поддержки Unicode. Забудьте использовать сломанные стандартные функции. Они не предназначены для поддержки Unicode, не поддерживают Unicode и не могут быть расширены для правильной поддержки. Посмотрите на использование ICU или Boost.Locale или что-то в этом роде.

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