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