Wenn Sie den Java-Zeichenfolgentyp mit JNA an C ++ übergeben und als Char * -Typ empfangen und dem Standardtyp std: string zugewiesen werden, wird er verstümmelt.
Anscheinend wird ** UTF-16 ** in Java verwendet, und diesmal war ** Shift-JIS ** in meiner C ++ - Umgebung erforderlich.
In C ++ scheint sich der Zeichencode, der von jedem Typ verarbeitet werden kann, je nach Umgebung zu ändern. Danke @yumetodo.
Ich vermute, dass die Konvertierung nicht funktioniert hat und ich einen Fehler erhalten habe.
Ich habe hier einen Teil des Codes zitiert. 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 zu verschieben-In JIS konvertieren*/
strShiftJis = utf8_to_multi_cppapi(strUtf);
/*Bitte wie von hier an*/
}
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);
}
Ich bin froh, dass ich etwas über Zeichencodes gelernt habe.
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