LINUX.ORG.RU

glibc, fputsws выводит текст транслитом. Почему?

 , ,


0

2

В общем, вот такой код (комментарии убираю, так как там закомментированы другие варианты, которые тоже не работают):

$ grep -v // literal.c; gcc -o literal literal.c; echo output:; ./literal; echo
#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main () {
	wchar_t* s;
	setlocale(LC_CTYPE,"UTF-8");
	s=L"Привет, мир!";
	fputws(s, stdout);
}
output:
Privet, mir!

Что за ерунда, почему транслит? Я же написал UTF-8. Если написать обычную строку, то всё работает.

★★★★★

Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от fsb4000

А, и правда. Написал en_US.UTF-8 и заработало. Но почему тогда никаких ворнингов, ничего?

И вопрос откуда взялся транслит остаётся.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

А, и правда. Но почему тогда никаких ворнингов, ничего?

Всё было, ты просто не проверил результат setlocale (при ошибке применения локали возвращается NULL)

https://gcc.godbolt.org/z/eqMzKo

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от X512

КОИ-8?

во-первых, KOI-7, а во-вторых, в результате было бы тогда «pRIWET, mIR!»

так что, не.. тут что-то другое

aol ★★★★★
()

Если память не подводит, то передав в setlocale(LC_CTYPE,«UTF-8») пустую строку вида "", у тебя установится кодировка твоей локали без необходимости что-то угадывать.

pavlick ★★
()
Последнее исправление: pavlick (всего исправлений: 1)

Privet, mir!

Что за ерунда, почему транслит?

Linux. Linux никогда не меняется.

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.