icu_string_conversions.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright (c) 2011 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. #ifndef BASE_I18N_ICU_STRING_CONVERSIONS_H_
  5. #define BASE_I18N_ICU_STRING_CONVERSIONS_H_
  6. #include <string>
  7. #include "base/i18n/base_i18n_export.h"
  8. #include "base/i18n/i18n_constants.h"
  9. #include "base/strings/string16.h"
  10. #include "base/strings/string_piece.h"
  11. namespace base {
  12. // Defines the error handling modes of UTF16ToCodepage and CodepageToUTF16.
  13. class OnStringConversionError {
  14. public:
  15. enum Type {
  16. // The function will return failure. The output buffer will be empty.
  17. FAIL,
  18. // The offending characters are skipped and the conversion will proceed as
  19. // if they did not exist.
  20. SKIP,
  21. // When converting to Unicode, the offending byte sequences are substituted
  22. // by Unicode replacement character (U+FFFD). When converting from Unicode,
  23. // this is the same as SKIP.
  24. SUBSTITUTE,
  25. };
  26. private:
  27. OnStringConversionError() = delete;
  28. };
  29. // Converts between UTF-16 strings and the encoding specified. If the
  30. // encoding doesn't exist or the encoding fails (when on_error is FAIL),
  31. // returns false.
  32. BASE_I18N_EXPORT bool UTF16ToCodepage(base::StringPiece16 utf16,
  33. const char* codepage_name,
  34. OnStringConversionError::Type on_error,
  35. std::string* encoded);
  36. BASE_I18N_EXPORT bool CodepageToUTF16(base::StringPiece encoded,
  37. const char* codepage_name,
  38. OnStringConversionError::Type on_error,
  39. string16* utf16);
  40. // Converts from any codepage to UTF-8 and ensures the resulting UTF-8 is
  41. // normalized.
  42. BASE_I18N_EXPORT bool ConvertToUtf8AndNormalize(base::StringPiece text,
  43. const std::string& charset,
  44. std::string* result);
  45. } // namespace base
  46. #endif // BASE_I18N_ICU_STRING_CONVERSIONS_H_