
Ioann V
03.09.2017
14:12:55
Так что накиньте кода, который работает именно с UTF 8

Ilia
03.09.2017
14:13:10

Ioann V
03.09.2017
14:13:15
И все это в консоленьку Виндовую закидывает

Friedrich
03.09.2017
14:13:21
А как, собственно работать с Уникодом в консоли у Винды ?
Последние дня три мы это обсуждаем. Выше я привёл ссылку на приложение, которое православно печатает юникодовый список всех установленных прог из MSI.
TLDR:
- _setmode(_fileno(stdout), _O_U16TEXT); в начале программы
- используешь std::wcout и std::wprintf везде

Google

Matwey
03.09.2017
14:13:28
@fvnever ты мне объясни зачем в виртуальном терминале экономить байты? выдавай каждый символ хоть 8-байтным кодом сразу

Anatoly
03.09.2017
14:13:55

Ioann V
03.09.2017
14:14:02
Это UTF16LE

Friedrich
03.09.2017
14:14:10

Anatoly
03.09.2017
14:14:11

Ioann V
03.09.2017
14:14:19
Если не ошибаюсь, конечно

Friedrich
03.09.2017
14:14:21

Matwey
03.09.2017
14:14:30

Friedrich
03.09.2017
14:14:31
Это UTF16LE
В этой программе — да. UTF-16 это разве не юникод?

Ioann V
03.09.2017
14:14:54
Ну это явно не UTF 8

Friedrich
03.09.2017
14:15:03
Да, совершенно верно, UTF-16 это не UTF-8.
Просили юникод — нате вам юникод.

Google

Ilia
03.09.2017
14:15:30

Ioann V
03.09.2017
14:15:38
А я прошу UTF 8 - так как через него и только него можно представить все что есть на этой планете

Friedrich
03.09.2017
14:16:04
С utf8 винда не работает
Ну, на самом деле работает (65001), но вот с вводом в этом режиме у меня постоянные проблемы. Ни разу не видел, чтобы работало нормально.

Ioann V
03.09.2017
14:16:19
А вот то что там в строках вводили в 11 - 14 плюсах, позможность писать /u+0x...
Или такого не было ? Если было, то расскажите, что это тогда ?

Friedrich
03.09.2017
14:16:53

Ioann V
03.09.2017
14:17:11
Согласен, теперь интересуют вопросы выше :)

Ilia
03.09.2017
14:17:30

Square
03.09.2017
14:17:46

Friedrich
03.09.2017
14:17:56

Ioann V
03.09.2017
14:18:19

Friedrich
03.09.2017
14:18:34

Square
03.09.2017
14:18:48

Friedrich
03.09.2017
14:18:49
Последовательность байт — это уже кодировка какая-то.

Ioann V
03.09.2017
14:18:51
Ну, как знал, так и ответил, что вам поправить сложно что ли :)?

Friedrich
03.09.2017
14:18:59
У юникода есть несколько кодировок, они называются UTF.

Square
03.09.2017
14:19:01

Friedrich
03.09.2017
14:19:10
UTF-8, UTF-16, etc.

Ioann V
03.09.2017
14:19:21
Согласен, да - все остальное кодировка декодировка

Google

Square
03.09.2017
14:19:23

Ilia
03.09.2017
14:19:26

Friedrich
03.09.2017
14:20:10

Square
03.09.2017
14:20:14
Недавно обсуждали почему утф8 не панацея.
Для хранения он хорош однозначно

Ioann V
03.09.2017
14:20:37

Square
03.09.2017
14:21:03
Она и на русском есть. За 17 лет актуальности не потеряла

Friedrich
03.09.2017
14:21:20
Немного работает, но по сути нет
Представь, что ты пишешь программу, которая спрашивает у пользователя букву. И считывает её в однобайтовый буфер (потому что у нас же однобайтовая кодировка, да?).
И вот тут ей внезапно суют кириллическую двухбайтовую «букву» в этот несчастный буфер. И всё превращается в ад.

Ioann V
03.09.2017
14:21:47
Не могу найти, то что ты мне кидал :)

Square
03.09.2017
14:22:01
Ну гуглится же на раз два

Square
03.09.2017
14:22:29
Джоел спольски - что нужно знать про кодировки

Ioann V
03.09.2017
14:22:51
thx :)

Square
03.09.2017
14:23:06
Вот актуализированная осовремененная версия со ссылкой на оригинал
http://kunststube.net/encoding/
Multibyte vs widechar и вот это вот все

Vladislav
03.09.2017
14:24:04

Square
03.09.2017
14:24:22

Ioann V
03.09.2017
14:25:00
Да, я ее даже когда то читал. Но все быстро забывается, если честно :)

Google

Friedrich
03.09.2017
14:25:05
На самом деле, для англоязычной аудитории статья более актуальна, чем для наших. Это же не им приходилось все эти сорок лет разгадывать ребусы из разряда БНОПНЯ.

Vladislav
03.09.2017
14:25:32

Square
03.09.2017
14:26:01
Владик чот пишет разгромное ...

Vladislav
03.09.2017
14:26:15

Friedrich
03.09.2017
14:26:22
Вангую, что там будет ненависти пост.
...чёрт, нет.

Ioann V
03.09.2017
14:27:07

Square
03.09.2017
14:27:21

Friedrich
03.09.2017
14:27:34

Vladislav
03.09.2017
14:27:44
юникод - он про другое. он кодирует назначенный символ в >1 октет
не более

Admin
ERROR: S client not available

Влад
03.09.2017
14:27:54

Ioann V
03.09.2017
14:28:13

Square
03.09.2017
14:28:45
Блэт. Посоны. Давайте уже без гаданий на ромашке

Friedrich
03.09.2017
14:28:45
Юникод каждому «символу» (а это тоже не вполне однозначное понятие, кстати) ставит в соответствие некий код. Этот код можно записать разными последовательностями байт. Начиная с big/little endian (что тоже учитывается), и заканчивая способами записи многобайтовых последовательностей.

Square
03.09.2017
14:29:01

Friedrich
03.09.2017
14:29:37
Кстати, а UTF-32 тоже бывает LE/BE? Я про его варианты никогда не слышал.

Vladislav
03.09.2017
14:29:52

Ioann V
03.09.2017
14:30:11

Vladislav
03.09.2017
14:30:43

Google

Square
03.09.2017
14:30:45

Friedrich
03.09.2017
14:30:47
Есть ещё одна смешная ремарка (на самом деле, грустная). Микрософт почему-то думает, что «Юникод» — это UTF-16LE :)
И последовательно у себя применяет такую терминологию.

Matwey
03.09.2017
14:31:12

Vladislav
03.09.2017
14:31:20

Square
03.09.2017
14:31:21

Ioann V
03.09.2017
14:31:57

Vladislav
03.09.2017
14:32:10
когда history++ в 200x писал с совместимостью от 98 до xp+ всего этого наелся

Ioann V
03.09.2017
14:32:31
Хммм... а как писать переносимые програмы с кодировками с винды на никсы ?
Вот в никсах вчар если не ошибаюсь 4 байта

Friedrich
03.09.2017
14:32:58

Ioann V
03.09.2017
14:33:10
Тупо все в чарах и хранить ?(я так и делаю собсно)

TriΔng3l
03.09.2017
14:33:24

Friedrich
03.09.2017
14:33:31

Vladislav
03.09.2017
14:33:41
utf* отлично можно хранить в чарах

Ioann V
03.09.2017
14:33:49

Vladislav
03.09.2017
14:34:03
вне зависимости от плаформы

Ioann V
03.09.2017
14:34:50
тогда все четко - и вообще мути никакой нету. Меня вот только одно всегда смущало - это плотность кодирования
Вот читаю я положим файл
Я не знаю какого он формата
кодирования

Friedrich
03.09.2017
14:35:06
utf* отлично можно хранить в чарах
Можно. Одна из возможных стратегий — это внутри программы все строки хранить в UTF-8 (и сохранять в std::string, например). И конвертировать при передаче во внешние API (если это линукс — то либо ничего не делаешь, либо, если хочешь работать по всем правилам, то пробуешь конвертировать в текущую локаль; если это винда — то конвертируешь в UTF-16 перед отправкой в функции типа WriteConsoleW).

Ioann V
03.09.2017
14:35:42
Вот как собсно быть в таких случаях - я лично сделал автоопределение кодировки, но оно естессно только для тех утф - в которых реально это распознать