1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_I18N_ICU_STRING_CONVERSIONS_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_I18N_ICU_STRING_CONVERSIONS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <string> 9*6777b538SAndroid Build Coastguard Worker #include <string_view> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "base/i18n/base_i18n_export.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/i18n/i18n_constants.h" 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker namespace base { 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker // Defines the error handling modes of UTF16ToCodepage and CodepageToUTF16. 17*6777b538SAndroid Build Coastguard Worker class OnStringConversionError { 18*6777b538SAndroid Build Coastguard Worker public: 19*6777b538SAndroid Build Coastguard Worker enum Type { 20*6777b538SAndroid Build Coastguard Worker // The function will return failure. The output buffer will be empty. 21*6777b538SAndroid Build Coastguard Worker FAIL, 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker // The offending characters are skipped and the conversion will proceed as 24*6777b538SAndroid Build Coastguard Worker // if they did not exist. 25*6777b538SAndroid Build Coastguard Worker SKIP, 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // When converting to Unicode, the offending byte sequences are substituted 28*6777b538SAndroid Build Coastguard Worker // by Unicode replacement character (U+FFFD). When converting from Unicode, 29*6777b538SAndroid Build Coastguard Worker // this is the same as SKIP. 30*6777b538SAndroid Build Coastguard Worker SUBSTITUTE, 31*6777b538SAndroid Build Coastguard Worker }; 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker private: 34*6777b538SAndroid Build Coastguard Worker OnStringConversionError() = delete; 35*6777b538SAndroid Build Coastguard Worker }; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker // Converts between UTF-16 strings and the encoding specified. If the 38*6777b538SAndroid Build Coastguard Worker // encoding doesn't exist or the encoding fails (when on_error is FAIL), 39*6777b538SAndroid Build Coastguard Worker // returns false. 40*6777b538SAndroid Build Coastguard Worker BASE_I18N_EXPORT bool UTF16ToCodepage(std::u16string_view utf16, 41*6777b538SAndroid Build Coastguard Worker const char* codepage_name, 42*6777b538SAndroid Build Coastguard Worker OnStringConversionError::Type on_error, 43*6777b538SAndroid Build Coastguard Worker std::string* encoded); 44*6777b538SAndroid Build Coastguard Worker BASE_I18N_EXPORT bool CodepageToUTF16(std::string_view encoded, 45*6777b538SAndroid Build Coastguard Worker const char* codepage_name, 46*6777b538SAndroid Build Coastguard Worker OnStringConversionError::Type on_error, 47*6777b538SAndroid Build Coastguard Worker std::u16string* utf16); 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // Converts from any codepage to UTF-8 and ensures the resulting UTF-8 is 50*6777b538SAndroid Build Coastguard Worker // normalized. 51*6777b538SAndroid Build Coastguard Worker BASE_I18N_EXPORT bool ConvertToUtf8AndNormalize(std::string_view text, 52*6777b538SAndroid Build Coastguard Worker const std::string& charset, 53*6777b538SAndroid Build Coastguard Worker std::string* result); 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker } // namespace base 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Worker #endif // BASE_I18N_ICU_STRING_CONVERSIONS_H_ 58