// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_I18N_ICU_STRING_CONVERSIONS_H_ #define BASE_I18N_ICU_STRING_CONVERSIONS_H_ #include #include "base/i18n/base_i18n_export.h" #include "base/i18n/i18n_constants.h" #include "base/strings/string16.h" #include "base/strings/string_piece.h" namespace base { // Defines the error handling modes of UTF16ToCodepage and CodepageToUTF16. class OnStringConversionError { public: enum Type { // The function will return failure. The output buffer will be empty. FAIL, // The offending characters are skipped and the conversion will proceed as // if they did not exist. SKIP, // When converting to Unicode, the offending byte sequences are substituted // by Unicode replacement character (U+FFFD). When converting from Unicode, // this is the same as SKIP. SUBSTITUTE, }; private: OnStringConversionError() = delete; }; // Converts between UTF-16 strings and the encoding specified. If the // encoding doesn't exist or the encoding fails (when on_error is FAIL), // returns false. BASE_I18N_EXPORT bool UTF16ToCodepage(base::StringPiece16 utf16, const char* codepage_name, OnStringConversionError::Type on_error, std::string* encoded); BASE_I18N_EXPORT bool CodepageToUTF16(base::StringPiece encoded, const char* codepage_name, OnStringConversionError::Type on_error, string16* utf16); // Converts from any codepage to UTF-8 and ensures the resulting UTF-8 is // normalized. BASE_I18N_EXPORT bool ConvertToUtf8AndNormalize(base::StringPiece text, const std::string& charset, std::string* result); } // namespace base #endif // BASE_I18N_ICU_STRING_CONVERSIONS_H_