1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
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_STRINGS_UTF_STRING_CONVERSIONS_H_
6#define BASE_STRINGS_UTF_STRING_CONVERSIONS_H_
7
8#include <string>
9
10#include "base/base_export.h"
11#include "base/strings/string16.h"
12#include "base/strings/string_piece.h"
13
14namespace base {
15
16// These convert between UTF-8, -16, and -32 strings. They are potentially slow,
17// so avoid unnecessary conversions. The low-level versions return a boolean
18// indicating whether the conversion was 100% valid. In this case, it will still
19// do the best it can and put the result in the output buffer. The versions that
20// return strings ignore this error and just return the best conversion
21// possible.
22BASE_EXPORT bool WideToUTF8(const wchar_t* src, size_t src_len,
23                            std::string* output);
24BASE_EXPORT std::string WideToUTF8(const std::wstring& wide);
25BASE_EXPORT bool UTF8ToWide(const char* src, size_t src_len,
26                            std::wstring* output);
27BASE_EXPORT std::wstring UTF8ToWide(const StringPiece& utf8);
28
29BASE_EXPORT bool WideToUTF16(const wchar_t* src, size_t src_len,
30                             string16* output);
31BASE_EXPORT string16 WideToUTF16(const std::wstring& wide);
32BASE_EXPORT bool UTF16ToWide(const char16* src, size_t src_len,
33                             std::wstring* output);
34BASE_EXPORT std::wstring UTF16ToWide(const string16& utf16);
35
36BASE_EXPORT bool UTF8ToUTF16(const char* src, size_t src_len, string16* output);
37BASE_EXPORT string16 UTF8ToUTF16(const StringPiece& utf8);
38BASE_EXPORT bool UTF16ToUTF8(const char16* src, size_t src_len,
39                             std::string* output);
40BASE_EXPORT std::string UTF16ToUTF8(const string16& utf16);
41
42// These convert an ASCII string, typically a hardcoded constant, to a
43// UTF16/Wide string.
44BASE_EXPORT std::wstring ASCIIToWide(const StringPiece& ascii);
45BASE_EXPORT string16 ASCIIToUTF16(const StringPiece& ascii);
46
47// Converts to 7-bit ASCII by truncating. The result must be known to be ASCII
48// beforehand.
49BASE_EXPORT std::string UTF16ToASCII(const string16& utf16);
50
51}  // namespace base
52
53#endif  // BASE_STRINGS_UTF_STRING_CONVERSIONS_H_
54