В моей системе довольно обычный Ubuntu 13.10, французский символ «éèàçù ...» всегда обрабатывается любыми инструментами, которые я использую, несмотря на то, что переменные среды LC_ устанавливаются на en_US. UTF-8. В частности, утилиты командной строки, такие как grep, cat, ... всегда читают и печатают эти символы без заминки.Невозможно установить stdout в режиме широких символов
Несмотря на эти замечания, такая небольшая программа, как
int main() {
printf("%c", getchar());
return 0;
}
терпит неудачу, когда пользователь вводит «E».
С man-страниц и большого количества поисковых запросов нет стандартного способа закрыть stdout, а затем повторно открыть его. Из man fwide(), если stdout находится в байтовом режиме, я не могу передать его в режим широкого символа, не закрывая его и не открывая его ... поэтому я не могу использовать getwchar() и wprintf().
Я не могу поверить, что каждая утилита, такая как cat, grep и т. Д., Повторно реализует способ управления широкими символами, но из моих исследований я не вижу другого пути.
Есть ли у моей системы проблемы? Я не вижу, как с тех пор всякая утилита работает безупречно. Что мне не хватает, пожалуйста?
Вам не нужны широкие символы для поддержки Unicode. – ninjalj
Если я читаю char по char, что я делаю, потому что мое приложение находится в сыром режиме, я полагаю, что знаю, но я вполне мог ошибаться. – pouzzler