// Copyright 2016 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. #include "base/i18n/encoding_detection.h" #include "build/build_config.h" #include "third_party/ced/src/compact_enc_det/compact_enc_det.h" // third_party/ced/src/util/encodings/encodings.h, which is included // by the include above, undefs UNICODE because that is a macro used // internally in ced. If we later in the same translation unit do // anything related to Windows or Windows headers those will then use // the ASCII versions which we do not want. To avoid that happening in // jumbo builds, we redefine UNICODE again here. #if defined(OS_WIN) #define UNICODE 1 #endif // OS_WIN namespace base { bool DetectEncoding(const std::string& text, std::string* encoding) { int consumed_bytes; bool is_reliable; Encoding enc = CompactEncDet::DetectEncoding( text.c_str(), text.length(), nullptr, nullptr, nullptr, UNKNOWN_ENCODING, UNKNOWN_LANGUAGE, CompactEncDet::QUERY_CORPUS, // plain text false, // Include 7-bit encodings &consumed_bytes, &is_reliable); if (enc == UNKNOWN_ENCODING) return false; *encoding = MimeEncodingName(enc); return true; } } // namespace base