1 /* 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 // Conversion functions for UTF-8 and UTF-16 strings on Windows. 12 // Duplicated from talk/base/win32.h. 13 #ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_UTF_UTIL_H_ 14 #define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_UTF_UTIL_H_ 15 16 #ifdef WIN32 17 #include <windows.h> 18 #include <string> 19 20 #include "webrtc/system_wrappers/interface/scoped_ptr.h" 21 22 namespace webrtc { 23 24 inline std::wstring ToUtf16(const char* utf8, size_t len) { 25 int len16 = ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), 26 NULL, 0); 27 scoped_ptr<wchar_t[]> ws(new wchar_t[len16]); 28 ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), ws.get(), 29 len16); 30 return std::wstring(ws.get(), len16); 31 } 32 33 inline std::wstring ToUtf16(const std::string& str) { 34 return ToUtf16(str.data(), str.length()); 35 } 36 37 inline std::string ToUtf8(const wchar_t* wide, size_t len) { 38 int len8 = ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), 39 NULL, 0, NULL, NULL); 40 scoped_ptr<char[]> ns(new char[len8]); 41 ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), ns.get(), len8, 42 NULL, NULL); 43 return std::string(ns.get(), len8); 44 } 45 46 inline std::string ToUtf8(const wchar_t* wide) { 47 return ToUtf8(wide, wcslen(wide)); 48 } 49 50 inline std::string ToUtf8(const std::wstring& wstr) { 51 return ToUtf8(wstr.data(), wstr.length()); 52 } 53 54 } // namespace webrtc 55 56 #endif // WIN32 57 #endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_UTF_UTIL_H_ 58