From 844d3c5e1f565f9a782f309cd106203ae8c56da3 Mon Sep 17 00:00:00 2001 From: Michael Ow Date: Tue, 13 Sep 2011 18:10:10 +0000 Subject: [PATCH] ICU-8795 Remove suffix when CharsetMatch is creating a new string X-SVN-Rev: 30648 --- .../core/src/com/ibm/icu/text/CharsetMatch.java | 14 ++++++++++++-- .../dev/test/charsetdet/TestCharsetDetector.java | 10 ++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/CharsetMatch.java b/icu4j/main/classes/core/src/com/ibm/icu/text/CharsetMatch.java index 07e8f9fd1bc..00118fd555e 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/CharsetMatch.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/CharsetMatch.java @@ -1,6 +1,6 @@ /** ******************************************************************************* -* Copyright (C) 2005-2010, International Business Machines Corporation and * +* Copyright (C) 2005-2011, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -102,7 +102,17 @@ public class CharsetMatch implements Comparable { return sb.toString(); } else { - result = new String(fRawInput, getName()); + String name = getName(); + /* + * getName() may return a name with a suffix 'rtl' or 'ltr'. This cannot + * be used to open a charset (e.g. IBM424_rtl). The ending '_rtl' or 'ltr' + * should be stripped off before creating the string. + */ + int startSuffix = name.indexOf("_rtl") < 0 ? name.indexOf("_ltr") : name.indexOf("_rtl"); + if (startSuffix > 0) { + name = name.substring(0, startSuffix); + } + result = new String(fRawInput, name); } return result; diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java index 88119845181..edbe12c3108 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java @@ -617,11 +617,21 @@ public class TestCharsetDetector extends TestFmwk charsetMatch = m.getName(); CheckAssert(charsetMatch.equals("IBM424_rtl")); CheckAssert(m.getLanguage().equals("he")); + try { + m.getString(); + } catch (Exception ex) { + errln("Error getting string for charsetMatch: " + charsetMatch); + } m = _testIBM424_he_ltr(s); charsetMatch = m.getName(); CheckAssert(charsetMatch.equals("IBM424_ltr")); CheckAssert(m.getLanguage().equals("he")); + try { + m.getString(); + } catch (Exception ex) { + errln("Error getting string for charsetMatch: " + charsetMatch); + } } private CharsetMatch _test1255(String s) throws Exception { -- 2.40.0