11ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org/* 21ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 31ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * 41ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * Use of this source code is governed by a BSD-style license 51ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * that can be found in the LICENSE file in the root of the source 61ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * tree. An additional intellectual property rights grant can be found 71ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * in the file PATENTS. All contributing project authors may 81ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org * be found in the AUTHORS file in the root of the source tree. 91ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org */ 101ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 111ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org// Conversion functions for UTF-8 and UTF-16 strings on Windows. 121ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org// Duplicated from talk/base/win32.h. 131ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_UTF_UTIL_H_ 141ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_UTF_UTIL_H_ 151ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 161ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#ifdef WIN32 171ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#include <windows.h> 181ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#include <string> 191ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 201ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 211ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 221ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.orgnamespace webrtc { 231ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 241ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.orginline std::wstring ToUtf16(const char* utf8, size_t len) { 251ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org int len16 = ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), 261ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org NULL, 0); 271ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org scoped_ptr<wchar_t[]> ws(new wchar_t[len16]); 281ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), ws.get(), 291ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org len16); 301ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org return std::wstring(ws.get(), len16); 311ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org} 321ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 331ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.orginline std::wstring ToUtf16(const std::string& str) { 341ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org return ToUtf16(str.data(), str.length()); 351ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org} 361ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 371ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.orginline std::string ToUtf8(const wchar_t* wide, size_t len) { 381ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org int len8 = ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), 391ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org NULL, 0, NULL, NULL); 401ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org scoped_ptr<char[]> ns(new char[len8]); 411ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), ns.get(), len8, 421ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org NULL, NULL); 431ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org return std::string(ns.get(), len8); 441ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org} 451ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 461ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.orginline std::string ToUtf8(const wchar_t* wide) { 471ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org return ToUtf8(wide, wcslen(wide)); 481ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org} 491ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 501ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.orginline std::string ToUtf8(const std::wstring& wstr) { 511ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org return ToUtf8(wstr.data(), wstr.length()); 521ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org} 531ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 541ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org} // namespace webrtc 551ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org 561ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#endif // WIN32 571ed7008c34205d4f606ed4436c3bdd8902c4428akjellander@webrtc.org#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_UTF_UTIL_H_ 58