[email protected] | f53121d | 2011-03-22 22:11:08 | [diff] [blame] | 1 | // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef BASE_UTF_STRING_CONVERSIONS_H_ |
| 6 | #define BASE_UTF_STRING_CONVERSIONS_H_ |
[email protected] | 32b76ef | 2010-07-26 23:08:24 | [diff] [blame] | 7 | #pragma once |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 8 | |
| 9 | #include <string> |
| 10 | |
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 11 | #include "base/base_export.h" |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 12 | #include "base/string16.h" |
[email protected] | 39a749c | 2011-01-28 02:40:46 | [diff] [blame] | 13 | #include "base/string_piece.h" |
[email protected] | ce85f60 | 2009-11-07 01:34:53 | [diff] [blame] | 14 | |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 15 | // These convert between UTF-8, -16, and -32 strings. They are potentially slow, |
| 16 | // so avoid unnecessary conversions. The low-level versions return a boolean |
| 17 | // indicating whether the conversion was 100% valid. In this case, it will still |
| 18 | // do the best it can and put the result in the output buffer. The versions that |
| 19 | // return strings ignore this error and just return the best conversion |
| 20 | // possible. |
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 21 | BASE_EXPORT bool WideToUTF8(const wchar_t* src, size_t src_len, |
| 22 | std::string* output); |
| 23 | BASE_EXPORT std::string WideToUTF8(const std::wstring& wide); |
| 24 | BASE_EXPORT bool UTF8ToWide(const char* src, size_t src_len, |
| 25 | std::wstring* output); |
| 26 | BASE_EXPORT std::wstring UTF8ToWide(const base::StringPiece& utf8); |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 27 | |
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 28 | BASE_EXPORT bool WideToUTF16(const wchar_t* src, size_t src_len, |
| 29 | string16* output); |
| 30 | BASE_EXPORT string16 WideToUTF16(const std::wstring& wide); |
| 31 | BASE_EXPORT bool UTF16ToWide(const char16* src, size_t src_len, |
| 32 | std::wstring* output); |
| 33 | BASE_EXPORT std::wstring UTF16ToWide(const string16& utf16); |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 34 | |
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 35 | BASE_EXPORT bool UTF8ToUTF16(const char* src, size_t src_len, string16* output); |
| 36 | BASE_EXPORT string16 UTF8ToUTF16(const base::StringPiece& utf8); |
| 37 | BASE_EXPORT bool UTF16ToUTF8(const char16* src, size_t src_len, |
| 38 | std::string* output); |
| 39 | BASE_EXPORT std::string UTF16ToUTF8(const string16& utf16); |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 40 | |
| 41 | // We are trying to get rid of wstring as much as possible, but it's too big |
| 42 | // a mess to do it all at once. These conversions should be used when we |
| 43 | // really should just be passing a string16 around, but we haven't finished |
| 44 | // porting whatever module uses wstring and the conversion is being used as a |
| 45 | // stopcock. This makes it easy to grep for the ones that should be removed. |
| 46 | #if defined(OS_WIN) |
| 47 | # define WideToUTF16Hack |
| 48 | # define UTF16ToWideHack |
| 49 | #else |
| 50 | # define WideToUTF16Hack WideToUTF16 |
| 51 | # define UTF16ToWideHack UTF16ToWide |
| 52 | #endif |
| 53 | |
[email protected] | f1d8192 | 2010-07-31 17:47:09 | [diff] [blame] | 54 | // These convert an ASCII string, typically a hardcoded constant, to a |
| 55 | // UTF16/Wide string. |
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 56 | BASE_EXPORT std::wstring ASCIIToWide(const base::StringPiece& ascii); |
| 57 | BASE_EXPORT string16 ASCIIToUTF16(const base::StringPiece& ascii); |
[email protected] | f1d8192 | 2010-07-31 17:47:09 | [diff] [blame] | 58 | |
[email protected] | 047a03f | 2009-10-07 02:10:20 | [diff] [blame] | 59 | #endif // BASE_UTF_STRING_CONVERSIONS_H_ |