Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2009 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_UTF_STRING_CONVERSIONS_H_
      6 #define BASE_UTF_STRING_CONVERSIONS_H_
      7 
      8 #include <string>
      9 
     10 #include "base/string16.h"
     11 
     12 namespace base {
     13 class StringPiece;
     14 }
     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.
     22 //
     23 // Note that only the structural validity is checked and non-character
     24 // codepoints and unassigned are regarded as valid.
     25 // TODO(jungshik): Consider replacing an invalid input sequence with
     26 // the Unicode replacement character or adding |replacement_char| parameter.
     27 // Currently, it's skipped in the ouput, which could be problematic in
     28 // some situations.
     29 bool WideToUTF8(const wchar_t* src, size_t src_len, std::string* output);
     30 std::string WideToUTF8(const std::wstring& wide);
     31 bool UTF8ToWide(const char* src, size_t src_len, std::wstring* output);
     32 std::wstring UTF8ToWide(const base::StringPiece& utf8);
     33 
     34 bool WideToUTF16(const wchar_t* src, size_t src_len, string16* output);
     35 string16 WideToUTF16(const std::wstring& wide);
     36 bool UTF16ToWide(const char16* src, size_t src_len, std::wstring* output);
     37 std::wstring UTF16ToWide(const string16& utf16);
     38 
     39 bool UTF8ToUTF16(const char* src, size_t src_len, string16* output);
     40 string16 UTF8ToUTF16(const std::string& utf8);
     41 bool UTF16ToUTF8(const char16* src, size_t src_len, std::string* output);
     42 std::string UTF16ToUTF8(const string16& utf16);
     43 
     44 // We are trying to get rid of wstring as much as possible, but it's too big
     45 // a mess to do it all at once.  These conversions should be used when we
     46 // really should just be passing a string16 around, but we haven't finished
     47 // porting whatever module uses wstring and the conversion is being used as a
     48 // stopcock.  This makes it easy to grep for the ones that should be removed.
     49 #if defined(OS_WIN)
     50 # define WideToUTF16Hack
     51 # define UTF16ToWideHack
     52 #else
     53 # define WideToUTF16Hack WideToUTF16
     54 # define UTF16ToWideHack UTF16ToWide
     55 #endif
     56 
     57 #endif  // BASE_UTF_STRING_CONVERSIONS_H_
     58