Lorsque vous passez le type Java String à C ++ avec JNA, s'il est reçu en tant que type Char * et affecté au type std: string, il sera brouillé.
Il semble que ** UTF-16 ** soit utilisé en Java, et il semble que ** Shift-JIS ** était cette fois-ci requis dans mon environnement C ++.
En C ++, il semble que le code de caractère qui peut être manipulé par chaque type change en fonction de l'environnement. Merci @yumetodo.
Je suppose que la conversion ne fonctionnait pas et j'ai eu une erreur.
J'ai cité une partie du code ici. http://nekko1119.hatenablog.com/entry/2017/01/02/054629
use.cpp
#include <iostream>
#include <string>
#include <codecvt>
#include <cassert>
#include <locale>
void useString(char* str){
std:string strUtf;
strUtf = str;
/* uft-8 pour décaler-Convertir en JIS*/
strShiftJis = utf8_to_multi_cppapi(strUtf);
/*S'il vous plaît comme à partir d'ici*/
}
std::string utf8_to_multi_cppapi(std::string const& src)
{
auto const wide = utf8_to_wide_cppapi(src);
return wide_to_multi_capi(wide);
}
std::string wide_to_multi_capi(std::wstring const& src)
{
std::size_t converted{};
std::vector<char> dest(src.size() * sizeof(wchar_t) + 1, '\0');
if (::_wcstombs_s_l(&converted, dest.data(), dest.size(), src.data(), _TRUNCATE, ::_create_locale(LC_ALL, "jpn")) != 0) {
throw std::system_error{ errno, std::system_category() };
}
return std::string(dest.begin(), dest.end());
}
std::wstring utf8_to_wide_cppapi(std::string const& src)
{
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return converter.from_bytes(src);
}
Je suis content d'avoir appris les codes de caractères.
http://marupeke296.com/CPP_charUnicodeWideChar.html http://nekko1119.hatenablog.com/entry/2017/01/02/054629 https://cpprefjp.github.io/reference/codecvt/codecvt_utf8_utf16.html https://theolizer.com/cpp-school1/cpp-school1-18/
Recommended Posts