Home | History | Annotate | Download | only in i18n
      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_I18N_ICU_STRING_CONVERSIONS_H_
      6 #define BASE_I18N_ICU_STRING_CONVERSIONS_H_
      7 #pragma once
      8 
      9 #include <string>
     10 
     11 #include "base/string16.h"
     12 
     13 namespace base {
     14 
     15 // Defines the error handling modes of UTF16ToCodepage, CodepageToUTF16,
     16 // WideToCodepage and CodepageToWide.
     17 class OnStringConversionError {
     18  public:
     19   enum Type {
     20     // The function will return failure. The output buffer will be empty.
     21     FAIL,
     22 
     23     // The offending characters are skipped and the conversion will proceed as
     24     // if they did not exist.
     25     SKIP,
     26 
     27     // When converting to Unicode, the offending byte sequences are substituted
     28     // by Unicode replacement character (U+FFFD). When converting from Unicode,
     29     // this is the same as SKIP.
     30     SUBSTITUTE,
     31   };
     32 
     33  private:
     34   OnStringConversionError();
     35 };
     36 
     37 // Names of codepages (charsets) understood by icu.
     38 extern const char kCodepageLatin1[];  // a.k.a. ISO 8859-1
     39 extern const char kCodepageUTF8[];
     40 extern const char kCodepageUTF16BE[];
     41 extern const char kCodepageUTF16LE[];
     42 
     43 // Converts between UTF-16 strings and the encoding specified.  If the
     44 // encoding doesn't exist or the encoding fails (when on_error is FAIL),
     45 // returns false.
     46 bool UTF16ToCodepage(const string16& utf16,
     47                      const char* codepage_name,
     48                      OnStringConversionError::Type on_error,
     49                      std::string* encoded);
     50 bool CodepageToUTF16(const std::string& encoded,
     51                      const char* codepage_name,
     52                      OnStringConversionError::Type on_error,
     53                      string16* utf16);
     54 
     55 // Converts between wide strings and the encoding specified.  If the
     56 // encoding doesn't exist or the encoding fails (when on_error is FAIL),
     57 // returns false.
     58 bool WideToCodepage(const std::wstring& wide,
     59                     const char* codepage_name,
     60                     OnStringConversionError::Type on_error,
     61                     std::string* encoded);
     62 bool CodepageToWide(const std::string& encoded,
     63                     const char* codepage_name,
     64                     OnStringConversionError::Type on_error,
     65                     std::wstring* wide);
     66 
     67 // Converts from any codepage to UTF-8 and ensures the resulting UTF-8 is
     68 // normalized.
     69 bool ConvertToUtf8AndNormalize(const std::string& text,
     70                                const std::string& charset,
     71                                std::string* result);
     72 
     73 }  // namespace base
     74 
     75 #endif  // BASE_I18N_ICU_STRING_CONVERSIONS_H_
     76