diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlParser.java
index 4baa359..3a9f698 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlParser.java
@@ -27,6 +27,7 @@ import java.util.regex.Pattern;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.CloseShieldInputStream;
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MediaType;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.txt.CharsetDetector;
@@ -50,10 +51,6 @@ public class HtmlParser implements Parser {
                     "Content-Type['\\\"]\\s+content\\s*=\\s*['\\\"]" +
                     "([^'\\\"]+)['\\\"]\\s*/>");
     
-    // TIKA-350: handle charset as first element in content-type
-    private static final Pattern CONTENT_TYPE_PATTERN = Pattern.compile(
-                    "(?i)(?:;|)\\s*charset\\s*=\\s*([^\r;\\s]*)");
-
     /**
      * TIKA-332: Check for meta http-equiv tag with charset info in
      * HTML content.
@@ -93,14 +90,11 @@ public class HtmlParser implements Parser {
         String incomingCharset = metadata.get(Metadata.CONTENT_ENCODING);
         if (incomingCharset == null) {
             // TIKA-341: Use charset in content-type
-            String contentType = metadata.get(Metadata.CONTENT_TYPE);
-            if (contentType != null) {
-                Matcher m = CONTENT_TYPE_PATTERN.matcher(contentType);
-                if (m.find()) {
-                    String charset = m.group(1).trim();
-                    if (Charset.isSupported(charset)) {
-                        incomingCharset = charset;
-                    }
+            MediaType mt = MediaType.parse(metadata.get(Metadata.CONTENT_TYPE));
+            if (mt != null) {
+                String charset = mt.getParameters().get("charset");
+                if ((charset != null) && Charset.isSupported(charset)) {
+                    incomingCharset = charset;
                 }
             }
         }
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/txt/TXTParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/txt/TXTParser.java
index 6194fde..f2b8003 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/txt/TXTParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/txt/TXTParser.java
@@ -24,13 +24,12 @@ import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.DublinCore;
 import org.apache.tika.metadata.HttpHeaders;
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MediaType;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
@@ -62,8 +61,6 @@ import org.xml.sax.SAXException;
  */
 public class TXTParser implements Parser {
 
-    private static final Pattern CONTENT_TYPE_PATTERN = Pattern.compile("(?i);\\s*charset\\s*=\\s*(.*)");
-
     public void parse(
             InputStream stream, ContentHandler handler,
             Metadata metadata, ParseContext context)
@@ -79,12 +76,9 @@ public class TXTParser implements Parser {
         String incomingCharset = metadata.get(Metadata.CONTENT_ENCODING);
         if (incomingCharset == null) {
             // TIKA-341: Use charset in content-type
-            String contentType = metadata.get(Metadata.CONTENT_TYPE);
-            if (contentType != null) {
-                Matcher m = CONTENT_TYPE_PATTERN.matcher(contentType);
-                if (m.find()) {
-                    incomingCharset = m.group(1).trim();
-                }
+            MediaType mt = MediaType.parse(metadata.get(Metadata.CONTENT_TYPE));
+            if (mt != null) {
+                incomingCharset = mt.getParameters().get("charset");
             }
         }
 
