xref: /aosp_15_r20/external/libchrome/base/strings/utf_string_conversions.h (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #ifndef BASE_STRINGS_UTF_STRING_CONVERSIONS_H_
6*635a8641SAndroid Build Coastguard Worker #define BASE_STRINGS_UTF_STRING_CONVERSIONS_H_
7*635a8641SAndroid Build Coastguard Worker 
8*635a8641SAndroid Build Coastguard Worker #include <stddef.h>
9*635a8641SAndroid Build Coastguard Worker 
10*635a8641SAndroid Build Coastguard Worker #include <string>
11*635a8641SAndroid Build Coastguard Worker 
12*635a8641SAndroid Build Coastguard Worker #include "base/base_export.h"
13*635a8641SAndroid Build Coastguard Worker #include "base/strings/string16.h"
14*635a8641SAndroid Build Coastguard Worker #include "base/strings/string_piece.h"
15*635a8641SAndroid Build Coastguard Worker 
16*635a8641SAndroid Build Coastguard Worker namespace base {
17*635a8641SAndroid Build Coastguard Worker 
18*635a8641SAndroid Build Coastguard Worker // These convert between UTF-8, -16, and -32 strings. They are potentially slow,
19*635a8641SAndroid Build Coastguard Worker // so avoid unnecessary conversions. The low-level versions return a boolean
20*635a8641SAndroid Build Coastguard Worker // indicating whether the conversion was 100% valid. In this case, it will still
21*635a8641SAndroid Build Coastguard Worker // do the best it can and put the result in the output buffer. The versions that
22*635a8641SAndroid Build Coastguard Worker // return strings ignore this error and just return the best conversion
23*635a8641SAndroid Build Coastguard Worker // possible.
24*635a8641SAndroid Build Coastguard Worker BASE_EXPORT bool WideToUTF8(const wchar_t* src, size_t src_len,
25*635a8641SAndroid Build Coastguard Worker                             std::string* output);
26*635a8641SAndroid Build Coastguard Worker BASE_EXPORT std::string WideToUTF8(WStringPiece wide);
27*635a8641SAndroid Build Coastguard Worker BASE_EXPORT bool UTF8ToWide(const char* src, size_t src_len,
28*635a8641SAndroid Build Coastguard Worker                             std::wstring* output);
29*635a8641SAndroid Build Coastguard Worker BASE_EXPORT std::wstring UTF8ToWide(StringPiece utf8);
30*635a8641SAndroid Build Coastguard Worker 
31*635a8641SAndroid Build Coastguard Worker BASE_EXPORT bool WideToUTF16(const wchar_t* src, size_t src_len,
32*635a8641SAndroid Build Coastguard Worker                              string16* output);
33*635a8641SAndroid Build Coastguard Worker BASE_EXPORT string16 WideToUTF16(WStringPiece wide);
34*635a8641SAndroid Build Coastguard Worker BASE_EXPORT bool UTF16ToWide(const char16* src, size_t src_len,
35*635a8641SAndroid Build Coastguard Worker                              std::wstring* output);
36*635a8641SAndroid Build Coastguard Worker BASE_EXPORT std::wstring UTF16ToWide(StringPiece16 utf16);
37*635a8641SAndroid Build Coastguard Worker 
38*635a8641SAndroid Build Coastguard Worker BASE_EXPORT bool UTF8ToUTF16(const char* src, size_t src_len, string16* output);
39*635a8641SAndroid Build Coastguard Worker BASE_EXPORT string16 UTF8ToUTF16(StringPiece utf8);
40*635a8641SAndroid Build Coastguard Worker BASE_EXPORT bool UTF16ToUTF8(const char16* src, size_t src_len,
41*635a8641SAndroid Build Coastguard Worker                              std::string* output);
42*635a8641SAndroid Build Coastguard Worker BASE_EXPORT std::string UTF16ToUTF8(StringPiece16 utf16);
43*635a8641SAndroid Build Coastguard Worker 
44*635a8641SAndroid Build Coastguard Worker // This converts an ASCII string, typically a hardcoded constant, to a UTF16
45*635a8641SAndroid Build Coastguard Worker // string.
46*635a8641SAndroid Build Coastguard Worker BASE_EXPORT string16 ASCIIToUTF16(StringPiece ascii);
47*635a8641SAndroid Build Coastguard Worker 
48*635a8641SAndroid Build Coastguard Worker // Converts to 7-bit ASCII by truncating. The result must be known to be ASCII
49*635a8641SAndroid Build Coastguard Worker // beforehand.
50*635a8641SAndroid Build Coastguard Worker BASE_EXPORT std::string UTF16ToASCII(StringPiece16 utf16);
51*635a8641SAndroid Build Coastguard Worker 
52*635a8641SAndroid Build Coastguard Worker }  // namespace base
53*635a8641SAndroid Build Coastguard Worker 
54*635a8641SAndroid Build Coastguard Worker #endif  // BASE_STRINGS_UTF_STRING_CONVERSIONS_H_
55