Size: a a a

2021 February 19

S

SupaproBot in pro.cxx
@messia_sp Ваш вопрос перемещён в чат @supapro . Там Вам с радостью помогут с Вашей проблемой :)
источник

R

Respirant in pro.cxx
Всем привет.
У меня есть "wchar_t*", который используется в "_wfopen_s".
Все нормально работает на Windows, но на Android "wchar_t*" почему-то не правильные данные как будто принимает, из-за чего появляется ошибка Failed to open stream.
Я погулил и выяснил, что проблема в том, что на Windows "wchar_t*" имеет 2 байта, а на Android - 4 байта.

Так вот вопрос: можно ли как-то переопределить wchar_t*, чтобы он одинаково был реализовал на большей части поддерживаемых платформ? Может быть для этого есть определенные библиотеки, или это всё не нужно - и конвертацию можно сделать буквально одной строкой кода, через cast какой-нибудь?
источник

AS

Alex Sandrov in pro.cxx
Respirant
Всем привет.
У меня есть "wchar_t*", который используется в "_wfopen_s".
Все нормально работает на Windows, но на Android "wchar_t*" почему-то не правильные данные как будто принимает, из-за чего появляется ошибка Failed to open stream.
Я погулил и выяснил, что проблема в том, что на Windows "wchar_t*" имеет 2 байта, а на Android - 4 байта.

Так вот вопрос: можно ли как-то переопределить wchar_t*, чтобы он одинаково был реализовал на большей части поддерживаемых платформ? Может быть для этого есть определенные библиотеки, или это всё не нужно - и конвертацию можно сделать буквально одной строкой кода, через cast какой-нибудь?
Не знаю, но боюсь после переопределения wchar_t на анроиде может что-то поломаться в других (компилируемых-прилинковываемых) местах, которые будут ожидать 4 байта
источник

R

Respirant in pro.cxx
Alex Sandrov
Не знаю, но боюсь после переопределения wchar_t на анроиде может что-то поломаться в других (компилируемых-прилинковываемых) местах, которые будут ожидать 4 байта
Справедливо.

Тогда может быть есть другие варианты? Я могу использовать wchar_t и char, но программа должна поддерживать кириллицу, а char её не поддерживает, поэтому я выбрал wchar_t.
источник

D

Danya in pro.cxx
Respirant
Всем привет.
У меня есть "wchar_t*", который используется в "_wfopen_s".
Все нормально работает на Windows, но на Android "wchar_t*" почему-то не правильные данные как будто принимает, из-за чего появляется ошибка Failed to open stream.
Я погулил и выяснил, что проблема в том, что на Windows "wchar_t*" имеет 2 байта, а на Android - 4 байта.

Так вот вопрос: можно ли как-то переопределить wchar_t*, чтобы он одинаково был реализовал на большей части поддерживаемых платформ? Может быть для этого есть определенные библиотеки, или это всё не нужно - и конвертацию можно сделать буквально одной строкой кода, через cast какой-нибудь?
А вы уверены, что проблема именно в широких символах, а не других проблемах с fopen на Андроид?
источник

D

Danya in pro.cxx
источник

R

Respirant in pro.cxx
Danya
А вы уверены, что проблема именно в широких символах, а не других проблемах с fopen на Андроид?
Да, уверен. Когда я использую "char" вместо "wchar_t", и в "char" исключительно латинские символы, то все работает хорошо
источник

D

Danya in pro.cxx
Может тогда лучше перейти на char16_t?
источник

R

Respirant in pro.cxx
Danya
Может тогда лучше перейти на char16_t?
Я бы тоже так хотел сделать.
Но к сожалению я использую библиотеку, которая хоть и с открытым исходным кодом, но её очень сложно будет переделать под char16_t
источник

D

Danya in pro.cxx
Respirant
Я бы тоже так хотел сделать.
Но к сожалению я использую библиотеку, которая хоть и с открытым исходным кодом, но её очень сложно будет переделать под char16_t
Там есть интерфейс для обычного char?
источник

R

Respirant in pro.cxx
Danya
Там есть интерфейс для обычного char?
Да есть
источник

D

Danya in pro.cxx
Respirant
Да есть
Может тогда лучше попробовать char + utf8?
источник

D

Danya in pro.cxx
Но для винды наверное надо будет делать исключение
источник

R

Respirant in pro.cxx
Danya
Но для винды наверное надо будет делать исключение
Почему?
источник

D

Danya in pro.cxx
Respirant
Почему?
Я просто не знаю как она работает с utf8 в WinApi
источник

R

Respirant in pro.cxx
Я читал, что многие разработчики предпочитают для кроссплатформенности использовать wchar_t на Windows, а char на Unix/Mac. Может действительно в этом дело
источник

R

Respirant in pro.cxx
Danya
Я просто не знаю как она работает с utf8 в WinApi
Спасибо за помощь
источник

D

Danya in pro.cxx
Respirant
Я читал, что многие разработчики предпочитают для кроссплатформенности использовать wchar_t на Windows, а char на Unix/Mac. Может действительно в этом дело
Насколько я знаю так обычно и делают
Возможно в последних версиях винды WinApi научился в utf8, но кто знает
источник

R

Respirant in pro.cxx
Danya
Насколько я знаю так обычно и делают
Возможно в последних версиях винды WinApi научился в utf8, но кто знает
Не научился - у меня появляются китайские иероглифы вместо нормальных символов :)
источник

MK

Mikhail Kalugin in pro.cxx
Danya
Насколько я знаю так обычно и делают
Возможно в последних версиях винды WinApi научился в utf8, но кто знает
Не научился - wchar_t так и остался, вообще при переходе с платформы на платформу стоит ожидать, что кодировка всего не-ASCII может поменяться.
источник