История изменений
Исправление MOPKOBKA, (текущая версия) :
Я считаю что вариант где везде один wchar_t намного лучше. Отлаживать, писать, поддерживать два варианта с char и wchar_t это плохой вариант.
Но если рассмотреть «простой» вариант с char, то: Вывод в файл от локали никак не зависит, что fwrite дали то он и запишет. Можно выводить UTF-8 на любых версиях Windows, и у пользователя будет файл с корректным текстом UTF-8. Получается можно установить правильную локаль, использовать printf везде, кроме старых версий Windows и Wine, для них выводить в stdout.txt который пользователь может открыть блокнотом.
Как в случае с printf вывести правильно %30s? Ну в таком синтаксисе никак, ведь внутренний алгоритм считает выравнивание основываясь на char, тогда как русская буква это 2 char, но в терминале русская буква это одна буква. Просто нужно считать размер строки через перевод в wchar_t и самому говорить printf сколько ему нужно сделать отступов.
Проблема %30s не в локали, проблема в том что там не учитываются многобайтовые символы. Но ты их можешь учесть. А wprintf работает только потому что русская буква это 1 wchar_t и алгоритм не нарушается.
Исправление MOPKOBKA, :
Я считаю что вариант где везде один wchar_t намного лучше. Отлаживать, писать, поддерживать два варианта с char и wchar_t это плохой вариант.
Но если рассмотреть «простой» вариант с char, то: Вывод в файл от локали никак не зависит, что fwrite дали то он и запишет. Можно выводить UTF-8 на любых версиях Windows, и у пользователя будет файл с корректным текстом UTF-8. Получается можно установить правильную локаль, использовать printf везде, кроме старых версий Windows и Wine, для них выводить в stdout.txt который пользователь может открыть блокнотом.
Как в случае с printf вывести правильно %30s? Ну в таком синтаксисе никак, ведь внутренний алгоритм считает выравнивание основываясь на char, тогда как русская буква это 2 char, но в терминале русская буква это одна буква. Просто нужно считать размер строки через перевод в wchar_t и самому говорить printf сколько ему нужно сделать отступов.
Проблема %30s не в локали, проблема в том что там не учитываются многобайтовые символы. Но ты их можешь учесть.
Исправление MOPKOBKA, :
Я считаю что вариант где везде один wchar_t намного лучше. Отлаживать, писать, поддерживать два варианта с char и wchar_t это плохой вариант.
Но если рассмотреть «простой» вариант с char, то: Вывод в файл от локали никак не зависит, что fwrite дали то он и запишет. Можно выводить UTF-8 на любых версиях Windows, и у пользователя будет файл с корректным текстом UTF-8. Получается можно установить правильную локаль, использовать printf везде, кроме старых версий Windows и Wine, для них выводить в stdout.txt который пользователь может открыть блокнотом.
Как в случае с printf вывести правильно %30s? Ну в таком синтаксисе никак, ведь внутренний алгоритм считает выравнивание основываясь на char, тогда как русская буква это 2 char, но в терминале русская буква это одна буква. Просто нужно считать размер строки через перевод в wchar_t и самому говорить printf сколько ему нужно сделать отступов.
Исправление MOPKOBKA, :
Я считаю что вариант где везде один wchar_t намного лучше. Отлаживать, писать, поддерживать два варианта с char и wchar_t это плохой вариант.
Но если рассмотреть «простой» вариант с char, то: Вывод в файл от локали никак не зависит, что fwrite дали то он и запишет. Можно выводить UTF-8 на любых версиях Windows, и у пользователя будет файл с корректным текстом UTF-8. Получается можно установить правильную локаль, использовать printf везде, кроме старых версий Windows и Wine, для них выводить в stdout.txt который пользователь может открыть блокнотом.
Как в случае с printf вывести правильно %30s? Ну в таком синтаксисе никак, ведь внутренний алгоритм считает выравнивание основываясь на char, тогда как русский текст это 2 char, но в терминале одна буква. Просто нужно считать размер строки через перевод в wchar_t и самому говорить printf сколько ему нужно сделать отступов.
Исходная версия MOPKOBKA, :
Я считаю что вариант где везде один wchar_t намного лучше.
Но если рассмотреть «простой» вариант с char, то: Вывод в файл от локали никак не зависит, что fwrite дали то он и запишет. Можно выводить UTF-8 на любых версиях Windows, и у пользователя будет файл с корректным текстом UTF-8. Получается можно установить правильную локаль, использовать printf везде, кроме старых версий Windows и Wine, для них выводить в stdout.txt который пользователь может открыть блокнотом.
Как в случае с printf вывести правильно %30s? Ну в таком синтаксисе никак, ведь внутренний алгоритм считает выравнивание основываясь на char, тогда как русский текст это 2 char, но в терминале одна буква. Просто нужно считать размер строки через перевод в wchar_t и самому говорить printf сколько ему нужно сделать отступов.