aboutsummaryrefslogtreecommitdiffstats
path: root/src/vmime/charset.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmime/charset.cpp')
-rw-r--r--src/vmime/charset.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/vmime/charset.cpp b/src/vmime/charset.cpp
index 22bff301..1a291106 100644
--- a/src/vmime/charset.cpp
+++ b/src/vmime/charset.cpp
@@ -109,6 +109,43 @@ void charset::convert(const string& in, string& out, const charset& source, cons
}
+bool charset::isValidText
+ (const string& text, string::size_type* firstInvalidByte) const
+{
+ charsetConverterOptions opts;
+ opts.silentlyReplaceInvalidSequences = false;
+
+ charsetConverter::status st;
+
+ try
+ {
+ std::string out;
+
+ // Try converting to UTF-8
+ shared_ptr <charsetConverter> conv = charsetConverter::create(*this, vmime::charset("utf-8"), opts);
+ conv->convert(text, out, &st);
+ }
+ catch (exceptions::illegal_byte_sequence_for_charset& e)
+ {
+ // An illegal byte sequence was found in the input buffer
+ if (firstInvalidByte)
+ {
+ if (st.inputBytesRead < text.length())
+ *firstInvalidByte = st.inputBytesRead;
+ else
+ *firstInvalidByte = text.length();
+ }
+
+ return false;
+ }
+
+ if (firstInvalidByte)
+ *firstInvalidByte = text.length();
+
+ return true;
+}
+
+
const charset charset::getLocalCharset()
{
return (platform::getHandler()->getLocalCharset());