Сообщение Re[6]: Приложения под Windows все еще продаются? от 27.02.2019 9:44
Изменено 27.02.2019 9:51 drVanо
Re[6]: Приложения под Windows все еще продаются?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Почему не сразу в UTF-16? Тогда, как минимум, под виндой не нужна конвертация, и вся обработка идет без закидонов. А ежели куда надо выгрузить в UTF-8, то это всяко проще, чем всю обработку на него затачивать.
Потому что UTF8 — родная кодировка для OSX/Linux и для вызовов API никакая конвертация не требуется.
ЕМ>Почему не сразу в UTF-16? Тогда, как минимум, под виндой не нужна конвертация, и вся обработка идет без закидонов. А ежели куда надо выгрузить в UTF-8, то это всяко проще, чем всю обработку на него затачивать.
Потому что UTF8 — родная кодировка для OSX/Linux и для вызовов API никакая конвертация не требуется.
Re[6]: Приложения под Windows все еще продаются?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Почему не сразу в UTF-16? Тогда, как минимум, под виндой не нужна конвертация, и вся обработка идет без закидонов. А ежели куда надо выгрузить в UTF-8, то это всяко проще, чем всю обработку на него затачивать.
Потому что UTF8 — родная кодировка для OSX/Linux и для вызовов API никакая конвертация не требуется.
P.S. Например вот так:
ЕМ>Почему не сразу в UTF-16? Тогда, как минимум, под виндой не нужна конвертация, и вся обработка идет без закидонов. А ежели куда надо выгрузить в UTF-8, то это всяко проще, чем всю обработку на него затачивать.
Потому что UTF8 — родная кодировка для OSX/Linux и для вызовов API никакая конвертация не требуется.
P.S. Например вот так:
namespace os
{
...
HANDLE FileCreate(const char *name, uint32_t mode)
{
#ifdef VMP_GNU
int flags;
switch (FILE_OPEN_MODE(mode)) {
case fmOpenRead:
flags = O_RDONLY;
break;
case fmOpenWrite:
flags = O_WRONLY | O_TRUNC;
break;
case fmOpenReadWrite:
flags = O_RDWR;
break;
default:
return INVALID_HANDLE_VALUE;
}
if (mode & fmCreate)
flags |= (O_CREAT | O_TRUNC);
return reinterpret_cast<HANDLE>(open(name, flags, (flags & O_CREAT) ? S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH : 0));
#else
uint32_t desired_access, share_mode;
switch (FILE_OPEN_MODE(mode)) {
case fmOpenRead:
desired_access = GENERIC_READ;
break;
case fmOpenWrite:
desired_access = GENERIC_WRITE;
break;
case fmOpenReadWrite:
desired_access = GENERIC_WRITE | GENERIC_READ;
break;
default:
return INVALID_HANDLE_VALUE;
}
switch (FILE_SHARE_MODE(mode)) {
case fmShareExclusive:
share_mode = 0;
break;
case fmShareDenyWrite:
share_mode = FILE_SHARE_READ;
break;
case fmShareDenyRead:
share_mode = FILE_SHARE_WRITE;
break;
case fmShareDenyNone:
share_mode = FILE_SHARE_READ | FILE_SHARE_WRITE;
break;
default:
return INVALID_HANDLE_VALUE;
}
return CreateFileW(FromUTF8(name).c_str(), desired_access, share_mode, NULL, (mode & fmCreate) ? CREATE_ALWAYS : OPEN_EXISTING, 0, NULL);
#endif
}