
19.04.2023, 15:36
|
|
Участник форума
Регистрация: 25.11.2018
Сообщений: 263
С нами:
3929792
Репутация:
78
|
|
Сообщение от Digger Man
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
(обновлено), получилось с помощью следующей функции, спасибо.
C++:
Код:
std
::
string
CP1251_to_UTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
{
return
0
;
}
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Код:
[CODE]
std::string res = CP1251_to_UTF8(path.c_str());
sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
std::cout
|
|
|