|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Не компилируется вывод u8 строк: Код: plaintext 1. 2.
MSVC + включён latest draft версия C++. А что делать-то? Ну кроме явного приведения к char *. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 13:03 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Я чувствую, что в С++20 нас ждёт глобальный песец. Вот именно из-за введения типов аля char8_t и std::u8string. Дураками будут выглядеть все, кто написал u8 или вообще использовал utf-8 без особой необходимости. А пользователи std::wstring будут хитро ухмыляться себе под нос. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 12:44 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petravА пользователи std::wstring будут хитро ухмыляться себе под нос. Ага, они-то на неспособность её вывестись в std::cout наступили гораздо раньше... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 12:48 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravА пользователи std::wstring будут хитро ухмыляться себе под нос. Ага, они-то на неспособность её вывестись в std::cout наступили гораздо раньше... В том то и дело, что они решили эту проблему лет 20-ть назад (std::wcout). Сейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл utf-8 with BOM, то строка в кодировке Windows-1251. Возможно я что-то перепутал и тогда всё наоборот. При этом префикс u8 не даёт никакой определённости и его результат зависит от кодировки файла. Ещё существет #pragma, которая явно задаёт кодировку строк в utf-8. При этом если файл исходника utf-8 without BOM, то кодировка широких символов L"Привет" слетает — оно не работает. Или не работало недавно. Сейчас ещё добавятся типы char8_t и std::u8string и тогда количество вариантов явно увеличится. Скоро полетит вообще весь код, где написано u8"Операция Ы". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 14:54 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
так ведь работает всё: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:06 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
В ideone под С++14 - нормас. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:15 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petravСейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл utf-8 with BOM, то строка в кодировке Windows-1251. "О, сколько нам открытий чудных..." Каким способом по-твоему компилятор должен угадать кодировку исходника чтобы привеcти твой литерал в запрошенную тобой utf-8?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:26 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravСейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл utf-8 with BOM, то строка в кодировке Windows-1251. "О, сколько нам открытий чудных..." Каким способом по-твоему компилятор должен угадать кодировку исходника чтобы привеcти твой литерал в запрошенную тобой utf-8?.. Давай по другому? Программисты на Шарпе испытывают такие вселенские проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:33 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
mayton В ideone под С++14 - нормас. Конечно. Речь идёт о включённой опции "Preview - Features from the Latest C++ Working Draft (/std:c++latest)" в Студии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:35 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petravПрограммисты на Шарпе испытывают такие вселенские проблемы? Шарпеи пишут исходники в редакторах, отличных от среды, автоматически (принудительно) сохраняющей их в кодировке UTF-8 с ВОМ? Зачем, по-твоему, у компиляторов есть ключ для указания кодировки исходника?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:37 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПрограммисты на Шарпе испытывают такие вселенские проблемы? Шарпеи пишут исходники в редакторах, отличных от среды, автоматически (принудительно) сохраняющей их в кодировке UTF-8 с ВОМ? Зачем, по-твоему, у компиляторов есть ключ для указания кодировки исходника?.. Программисты Java тоже в 99% случаев используют исходники в UTF-8 (как умолчательный тип кодировки). Хотя бывает из левых репозитариев залетают сорцы в 1251 но обычно среда подсказывает о нестандартной кодировке. И ее фиксят. И есть внутренние соглашения на проектах о том что вся команда обычно использует одну кодировку. Кодировка вобщем - это опция компиллятора или сборщика. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:48 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petrav mayton В ideone под С++14 - нормас. Конечно. Речь идёт о включённой опции "Preview - Features from the Latest C++ Working Draft (/std:c++latest)" в Студии. А если собрать твой исходник с помощью Command Line (cl) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 15:51 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПрограммисты на Шарпе испытывают такие вселенские проблемы? Шарпеи пишут исходники в редакторах, отличных от среды, автоматически (принудительно) сохраняющей их в кодировке UTF-8 с ВОМ? Зачем, по-твоему, у компиляторов есть ключ для указания кодировки исходника?.. Да, тут я затупил, сорри. Наверное, потому что в GUI Студии никогда не видел принудительной установки кодировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 16:20 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... Конечно. Речь идёт о включённой опции "Preview - Features from the Latest C++ Working Draft (/std:c++latest)" в Студии. А если собрать твой исходник с помощью Command Line (cl) ? Да ничего там не поменяется, хоть как собирай. У строки u8"..." поменялся тип. Раньше он был char[]. Теперь он другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 16:28 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petrav Сейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл utf-8 with BOM, то строка в кодировке Windows-1251. petrav При этом если файл исходника utf-8 without BOM, то кодировка широких символов L"Привет" слетает — оно не работает. Или не работало недавно. Это легаси, но поведение по умолчанию нельзя изменить, потому что это сломает сборку старых проектов. https://docs.microsoft.com/en-us/cpp/build/reference/source-charset-set-source-character-set?view=msvc-160 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 20:51 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petrav, Скорее всего пофиксят в c++23 https://rawgit.com/sg16-unicode/sg16/master/papers/p1423r2.html Но вообще хранить многоязычный текст исходнике это плохой стиль. Максимум что имеет смысл это разные технические литералы. Но для них u8 не нужен, они все в ascii. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 11:44 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyНо для них u8 не нужен, они все в ascii. А зачем он тогда вообще нужен? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 12:35 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Anatoly MoskovskyНо для них u8 не нужен, они все в ascii. А зачем он тогда вообще нужен? Так давно уже говорилось и повторялось, что utf-8 вообще ни для чего не нужен. А вот вреда от него целый состав (из вагонов). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 12:40 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
а что будет без utf-8 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 12:49 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
бабушкин зайчик а что будет без utf-8 ? UTF32. Сейчас, конечно, набегут фанатики и будут рассказывать про то как они сэкономили один мегабайт памяти с utf-8. И это всё при том, что они работают под Depeche Mode во второй вкладке с Ютубом. И Гугл Хром прокачивает за рабочий день гигабайты. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 13:04 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petravUTF32. Разбудите меня когда в Линухе появится wopen() или хотя бы fwopen()... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 13:09 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravUTF32. Разбудите меня когда в Линухе появится wopen() или хотя бы fwopen()... Вы уверены, что функция открытия файла имеет какое-то отношение к кодировке файла? Мне кажется, что нет. Да и Линукс тут не причём. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 13:21 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А зачем он тогда вообще нужен? u8"" нужен, если прижмет и все-таки надо получить литерал с utf8 из платформозависимой кодировки. А дальше, зная что char8_t (результат u8 с C++20) - это utf-8 то можно построить API который utf-8 обрабатывает по-другому. Например под виндой возможно (не знаю как на самом деле) запись utf-8 в cout через стандартный char* API не приведет к ожидаемому результату т.к. вместо перевода в wchar он выведет строку как набор 8-bit char. Поэтому вендоры могут добавить char8_t* API (как предложено в p1423r2 выше) и реализовать перевод в кодировку поддерживаемую ОСью ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 13:24 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petravВы уверены, что функция открытия файла имеет какое-то отношение к кодировке файла? Я уверен, что функция открытия файла принимает на вход строку. Покажите мне, как Вы открываете файл с именем, хранящимся в std::wstring. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 13:28 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravВы уверены, что функция открытия файла имеет какое-то отношение к кодировке файла? Я уверен, что функция открытия файла принимает на вход строку. Покажите мне, как Вы открываете файл с именем, хранящимся в std::wstring. fopen() а что? Это на винде надо думать какой там ширины буква в имени файла, в нормальных системах это вообще не проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 18:18 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
White Owlfopen() а что? Код: sql 1. 2.
Так? И компилятор жрёт? И оно работает?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 18:49 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov White Owlfopen() а что? Код: sql 1. 2.
Так? И компилятор жрёт? И оно работает?.. Вот так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
А то что имя файла в юникоде и текст в юникоде - программиста не колышет, для этих тонкостей ОС есть. А то что ты нарисовал со всякими wstring и модификаторами констант - это извращение и уродство. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2021, 19:04 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
White Owl Вот так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И вот тут, лично у меня, возникает вопрос: как скормить в Цэ-API строку, три четверти байт которой - нулевые. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 11:35 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petrav, petravUTF32. Вот видишь, Сов говорит, что UTF-32 не нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 12:50 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Это всё, конечно, прэлэстно, но petrav "яростно топил" за UTF32. И вот тут, лично у меня, возникает вопрос: как скормить в Цэ-API строку, три четверти байт которой - нулевые. Как данные для прочитать из файла/базы, потом нарисовать на экране текст и обратно прочитать из поля ввода и записать в базу? Это отработано уже десятилетия. Любой посетитель этого топика (ну кроме совсем уж студентов первогодок) это делал неоднократно. А вот то что тут так яростно обсуждается по запихиванию юникодных строк в исходный текст программы - вот это дурацкий вопрос и совершенно не нужное извращение. Хотя да, с технической точки зрения можно использовать модификаторы строк объясняя компилятору что вот сейчас мы сойдем с ума и будем запихивать в исходник широкую строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 14:14 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Это уже примерно третий топик на тему utf-8. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 14:23 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
White OwlЭто отработано уже десятилетия. Любой посетитель этого топика (ну кроме совсем уж студентов первогодок) это делал неоднократно. Да, да. Один пользователь сохраняет файл "абв", второй пользователь пытается открыть файл "абв" и получает "файл не найден". Любой посетитель этого топика тут же поймёт "опаньки, у них разные локали, а любая линуховая файловая система воспринимает имя файла чисто как последовательность байт". Щазззз... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 14:34 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Да, да. Один пользователь сохраняет файл "абв", второй пользователь пытается открыть файл "абв" и получает "файл не найден". Любой посетитель этого топика тут же поймёт "опаньки, у них разные локали, а любая линуховая файловая система воспринимает имя файла чисто как последовательность байт". Щазззз... Вот с линуксовой машины я свободно открываю файлы с юникодными именами (кириллица и хирагана) записанные на NAS. В том числе и тем примитивным кодом что я тут показал пару постов тому назад. А вот на Вин10, есть у меня программка обучения японского которая и создает эти самые файлы с хираганой в имени - так вот обратно она их открыть не может "no such file". Сама создала, сама потеряла. Поэтому приходится следить чтобы все файлы она создавала с английскими именами, либо заходить на NAS с линуксовой машины и переименовывать файлы. Причем это переименование я могу делать как в sh, так и в Nemo, и даже в линуксовой версии FAR. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 02:02 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
White Owlя свободно открываю файлы с юникодными именами (кириллица и хирагана) записанные на NAS. А теперь, внимание, вопрос: какая файловая система и протокол доступа? Повторяю медленно: ты создаёшь файлы не "с кириллицей и хираганой", а с пачкой байт в которую твоя кириллица и хирагана воспроизводимо конвертируются. Локалью, гвоздиком прибитой в utf-8. Твои коллеги в дельфийском разделе, обращаясь к неинициализированным переменным и мусору в освобождённой памяти тоже говорят "так работает же всё уже десятки лет", ага... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 12:46 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Поскольку Белый Сова работает с Linux, то основные протоколы доступа к фс специфицированы на уровне слоя VFS. Тоесть если VFS гарантирует точное сохранение имен файлов как неспецифицированных блобов то и реализации такие как ext4, xfs, btrfs ... e.t.c. нормально схавают любые коды символов и сохранит их "as is". IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 12:54 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Вот именно про это я и говорил. Всё работает пока текущая пользовательская локаль прибита гвоздиком. Шаг влево-шаг вправо - опаньки. Хотя с его NAS-ом оно может работать и с любой локалью поскольку (внезапно) там NTFS и SMB, а линуховский драйвер NTFS переводит байты из текущей локали в (опять внезапно) юникод. Поэтому разбудите меня, когда из ядра выпилят все локали кроме utf-8, чтобы настало единообразное благолепие. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 13:01 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
IMHO сложно будет с Collation. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 13:09 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
Какие ещё collation? У Сова программы принимают строки как есть и используют как есть, (только) поэтому работают. Регистронечувствительность (в том числе файловых систем) - от Лукавого. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 13:29 |
|
std::ofstream и char8_t
|
|||
---|---|---|---|
#18+
petrav, я и сейчас прекрасно пользуюсь utf8 в обычном std::string (basic_string<char>) вместе со стеком GTK+ и горя не знаю. В GTK+ даже под вендой всё на utf8... Выставил при старте приложухи локаль "ru_RU.UTF-8" и норм. Если надо вывести в поток в другой кодировке, выставил через imbue() локаль для ostream и пиши сколько влезет. В чём проблема? Просто сделали std::u8string ТОЛЬКО для utf8. По мне так очень удобно! Можно хранить всё в utf8, а для всего остального использовать системную локаль и всё будет прекрасно перекодироваться туда-обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 10:30 |
|
|
Start [/forum/topic.php?all=1&fid=57&tid=2017187]: |
0ms |
get settings: |
19ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
15ms |
get forum data: |
2ms |
get page messages: |
666ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 783ms |
0 / 0 |