From fb93a578ee074542fd2beefb1ab63be86fed83ae Mon Sep 17 00:00:00 2001 From: Tomasz Rozbicki Date: Sun, 27 Jul 2014 23:27:00 +0200 Subject: [PATCH] Allow duplicated charsets in MediaType --- .../src/test/java/com/squareup/okhttp/MediaTypeTest.java | 5 +++++ okhttp/src/main/java/com/squareup/okhttp/MediaType.java | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/MediaTypeTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/MediaTypeTest.java index 45dd06a64..25805957a 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/MediaTypeTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/MediaTypeTest.java @@ -107,6 +107,11 @@ public class MediaTypeTest { assertEquals("UTF-8", mediaType.charset().name()); } + @Test public void testDuplicatedCharsets() { + MediaType mediaType = MediaType.parse("text/plain; charset=utf-8; charset=UTF-8"); + assertEquals("UTF-8", mediaType.charset().name()); + } + @Test public void testMultipleCharsets() { try { MediaType.parse("text/plain; charset=utf-8; charset=utf-16"); diff --git a/okhttp/src/main/java/com/squareup/okhttp/MediaType.java b/okhttp/src/main/java/com/squareup/okhttp/MediaType.java index b0b7f45f5..4d2f1fcf4 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/MediaType.java +++ b/okhttp/src/main/java/com/squareup/okhttp/MediaType.java @@ -61,10 +61,13 @@ public final class MediaType { String name = parameter.group(1); if (name == null || !name.equalsIgnoreCase("charset")) continue; - if (charset != null) throw new IllegalArgumentException("Multiple charsets: " + string); - charset = parameter.group(2) != null + String charsetParameter = parameter.group(2) != null ? parameter.group(2) // Value is a token. : parameter.group(3); // Value is a quoted string. + if (charset != null && !charsetParameter.equalsIgnoreCase(charset)) { + throw new IllegalArgumentException("Multiple different charsets: " + string); + } + charset = charsetParameter; } return new MediaType(string, type, subtype, charset);