LINUX.ORG.RU

История изменений

Исправление 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 сколько ему нужно сделать отступов.