diff --git a/src/share/classes/java/nio/charset/Charset.java b/src/share/classes/java/nio/charset/Charset.java
index 4908c77d1dbda8a59f7357469e43f9332a184f49..804d0091c483129568e1b727575ddb9ed634ca63 100644
--- a/src/share/classes/java/nio/charset/Charset.java
+++ b/src/share/classes/java/nio/charset/Charset.java
@@ -85,6 +85,9 @@ import sun.security.action.GetPropertyAction;
*
The dash character '-'
* ('\u002d', HYPHEN-MINUS),
*
+ * The plus character '+'
+ * ('\u002b', PLUS SIGN),
+ *
* The period character '.'
* ('\u002e', FULL STOP),
*
@@ -307,6 +310,7 @@ public abstract class Charset
if (c >= 'a' && c <= 'z') continue;
if (c >= '0' && c <= '9') continue;
if (c == '-' && i != 0) continue;
+ if (c == '+' && i != 0) continue;
if (c == ':' && i != 0) continue;
if (c == '_' && i != 0) continue;
if (c == '.' && i != 0) continue;
diff --git a/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java b/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
index 9c7ae0910fed25a46bb368dce362d1c3d2e8d6af..04434f1f56354c9524f707e89ca896c4983bdf93 100644
--- a/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
+++ b/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
@@ -916,7 +916,7 @@ public class ExtendedCharsets
"ccsid01140",
"cp01140",
"1140",
- // "ebcdic-us-037+euro"
+ "ebcdic-us-037+euro"
});
charset("IBM01141", "IBM1141",
@@ -925,7 +925,7 @@ public class ExtendedCharsets
"ccsid01141",
"cp01141",
"1141",
- // "ebcdic-de-273+euro"
+ "ebcdic-de-273+euro"
});
charset("IBM01142", "IBM1142",
@@ -934,8 +934,8 @@ public class ExtendedCharsets
"ccsid01142",
"cp01142",
"1142",
- // "ebcdic-no-277+euro",
- // "ebcdic-dk-277+euro"
+ "ebcdic-no-277+euro",
+ "ebcdic-dk-277+euro"
});
charset("IBM01143", "IBM1143",
@@ -944,8 +944,8 @@ public class ExtendedCharsets
"ccsid01143",
"cp01143",
"1143",
- // "ebcdic-fi-278+euro",
- // "ebcdic-se-278+euro"
+ "ebcdic-fi-278+euro",
+ "ebcdic-se-278+euro"
});
charset("IBM01144", "IBM1144",
@@ -954,7 +954,7 @@ public class ExtendedCharsets
"ccsid01144",
"cp01144",
"1144",
- // "ebcdic-it-280+euro"
+ "ebcdic-it-280+euro"
});
charset("IBM01145", "IBM1145",
@@ -963,7 +963,7 @@ public class ExtendedCharsets
"ccsid01145",
"cp01145",
"1145",
- // "ebcdic-es-284+euro"
+ "ebcdic-es-284+euro"
});
charset("IBM01146", "IBM1146",
@@ -972,7 +972,7 @@ public class ExtendedCharsets
"ccsid01146",
"cp01146",
"1146",
- // "ebcdic-gb-285+euro"
+ "ebcdic-gb-285+euro"
});
charset("IBM01147", "IBM1147",
@@ -981,7 +981,7 @@ public class ExtendedCharsets
"ccsid01147",
"cp01147",
"1147",
- // "ebcdic-fr-277+euro"
+ "ebcdic-fr-277+euro"
});
charset("IBM01148", "IBM1148",
@@ -990,7 +990,7 @@ public class ExtendedCharsets
"ccsid01148",
"cp01148",
"1148",
- // "ebcdic-international-500+euro"
+ "ebcdic-international-500+euro"
});
charset("IBM01149", "IBM1149",
@@ -999,7 +999,7 @@ public class ExtendedCharsets
"ccsid01149",
"cp01149",
"1149",
- // "ebcdic-s-871+euro"
+ "ebcdic-s-871+euro"
});
// Macintosh MacOS/Apple char encodingd
diff --git a/src/share/classes/sun/nio/cs/standard-charsets b/src/share/classes/sun/nio/cs/standard-charsets
index a3cad5fd941d36c458722b96b1f7699ca618463a..da0b26f55bf64523d2abab4eabb1a1e51551c6ad 100644
--- a/src/share/classes/sun/nio/cs/standard-charsets
+++ b/src/share/classes/sun/nio/cs/standard-charsets
@@ -314,6 +314,7 @@ charset IBM00858 IBM858
alias ccsid00858
alias cp00858
alias 858
+ alias PC-Multilingual-850+euro
charset IBM862 IBM862
alias cp862 #JDK historical
diff --git a/test/sun/nio/cs/CheckICNE.java b/test/sun/nio/cs/CheckICNE.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b3e905f1d0c7deb59805222493e5f2e36da950e
--- /dev/null
+++ b/test/sun/nio/cs/CheckICNE.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ @bug 4849617
+ @summary Checks "+" is a legal character for charset name
+ */
+import java.nio.charset.*;
+
+public class CheckICNE {
+ static int failed = 0;
+ public static void main (String[] args) throws Exception {
+ try {
+ Charset.forName("abc+");
+ } catch (UnsupportedCharsetException uce) {}
+
+ try {
+ java.nio.charset.Charset.forName("+abc");
+ } catch (IllegalCharsetNameException icne) {}
+
+ String[] euros = {"PC-Multilingual-850+euro",
+ "ebcdic-us-037+euro",
+ "ebcdic-de-273+euro",
+ "ebcdic-no-277+euro",
+ "ebcdic-dk-277+euro",
+ "ebcdic-fi-278+euro",
+ "ebcdic-se-278+euro",
+ "ebcdic-it-280+euro",
+ "ebcdic-es-284+euro",
+ "ebcdic-gb-285+euro",
+ "ebcdic-fr-277+euro",
+ "ebcdic-international-500+euro",
+ "ebcdic-s-871+euro"
+ };
+
+ System.out.println("Test Passed!");
+ }
+}