1*da0073e9SAndroid Build Coastguard Worker #include <c10/util/Unicode.h>
2*da0073e9SAndroid Build Coastguard Worker
3*da0073e9SAndroid Build Coastguard Worker namespace c10 {
4*da0073e9SAndroid Build Coastguard Worker #if defined(_WIN32)
u8u16(const std::string & str)5*da0073e9SAndroid Build Coastguard Worker std::wstring u8u16(const std::string& str) {
6*da0073e9SAndroid Build Coastguard Worker if (str.empty()) {
7*da0073e9SAndroid Build Coastguard Worker return std::wstring();
8*da0073e9SAndroid Build Coastguard Worker }
9*da0073e9SAndroid Build Coastguard Worker int size_needed = MultiByteToWideChar(
10*da0073e9SAndroid Build Coastguard Worker CP_UTF8, 0, str.c_str(), static_cast<int>(str.size()), NULL, 0);
11*da0073e9SAndroid Build Coastguard Worker TORCH_CHECK(size_needed > 0, "Error converting the content to Unicode");
12*da0073e9SAndroid Build Coastguard Worker std::wstring wstr(size_needed, 0);
13*da0073e9SAndroid Build Coastguard Worker MultiByteToWideChar(
14*da0073e9SAndroid Build Coastguard Worker CP_UTF8,
15*da0073e9SAndroid Build Coastguard Worker 0,
16*da0073e9SAndroid Build Coastguard Worker str.c_str(),
17*da0073e9SAndroid Build Coastguard Worker static_cast<int>(str.size()),
18*da0073e9SAndroid Build Coastguard Worker &wstr[0],
19*da0073e9SAndroid Build Coastguard Worker size_needed);
20*da0073e9SAndroid Build Coastguard Worker return wstr;
21*da0073e9SAndroid Build Coastguard Worker }
u16u8(const std::wstring & wstr)22*da0073e9SAndroid Build Coastguard Worker std::string u16u8(const std::wstring& wstr) {
23*da0073e9SAndroid Build Coastguard Worker if (wstr.empty()) {
24*da0073e9SAndroid Build Coastguard Worker return std::string();
25*da0073e9SAndroid Build Coastguard Worker }
26*da0073e9SAndroid Build Coastguard Worker int size_needed = WideCharToMultiByte(
27*da0073e9SAndroid Build Coastguard Worker CP_UTF8,
28*da0073e9SAndroid Build Coastguard Worker 0,
29*da0073e9SAndroid Build Coastguard Worker wstr.c_str(),
30*da0073e9SAndroid Build Coastguard Worker static_cast<int>(wstr.size()),
31*da0073e9SAndroid Build Coastguard Worker NULL,
32*da0073e9SAndroid Build Coastguard Worker 0,
33*da0073e9SAndroid Build Coastguard Worker NULL,
34*da0073e9SAndroid Build Coastguard Worker NULL);
35*da0073e9SAndroid Build Coastguard Worker TORCH_CHECK(size_needed > 0, "Error converting the content to UTF8");
36*da0073e9SAndroid Build Coastguard Worker std::string str(size_needed, 0);
37*da0073e9SAndroid Build Coastguard Worker WideCharToMultiByte(
38*da0073e9SAndroid Build Coastguard Worker CP_UTF8,
39*da0073e9SAndroid Build Coastguard Worker 0,
40*da0073e9SAndroid Build Coastguard Worker wstr.c_str(),
41*da0073e9SAndroid Build Coastguard Worker static_cast<int>(wstr.size()),
42*da0073e9SAndroid Build Coastguard Worker &str[0],
43*da0073e9SAndroid Build Coastguard Worker size_needed,
44*da0073e9SAndroid Build Coastguard Worker NULL,
45*da0073e9SAndroid Build Coastguard Worker NULL);
46*da0073e9SAndroid Build Coastguard Worker return str;
47*da0073e9SAndroid Build Coastguard Worker }
48*da0073e9SAndroid Build Coastguard Worker #endif
49*da0073e9SAndroid Build Coastguard Worker } // namespace c10
50