Download the ICU 4.8 Release
Description
ICU is the premier library for software internationalization. ICU 4.8.1.1 is a maintenance release to ICU 4.8, see information below.
ICU 4.8 was a major release of ICU, with new features, new APIs, and many bug fixes in data and code.
Major changes in ICU 4.8 since ICU 4.6 include the following:
Common Changes
CLDR 2.0: The CLDR 2.0 release contains numerous improvements and bug fixes approved by the CLDR committee, including much additional data for many languages.
Explicit parent locale support in data imported from CLDR (#8031)
MessageFormat and related classes (choice/plural/select) have been reimplemented, with several improvements and some incompatible changes. See the detail section below.
Extended PluralFormat pattern syntax supports explicit-value forms and offsets. (#7858)
Utility APIs in PluralRules (get some/all/unique keyword values)
Time zone API to return a list of available canonical system time zone IDs (#8278)
Time zone API to return a region (#8279)
Collation: Full implementation & public API for script reordering
Dictionary-type trie (#8167)
GB18030-2005 update (#8274)
ICU4C Specific Changes
Alphabetic Index support ported from ICU4J (#7538)
X11 Compound Text encoding support ported from ICU4J (#7959)
Appendable interface (#8314)
ICU4J Specific Changes
Technology Preview: APIs for region information. The new class com.ibm.icu.util.Region provides mapping across different region/territory codes and containment relationship. (#8347)
JDK Locale conversion to support JDK 7 new Locale fields (#8078)
Technology Preview: TimeZoneFormat and TimeZoneNames. New classes designed for supporting CLDR time zone display name algorithm and data through public APIs. (#8342)
Known Issues
Details about MessageFormat Changes
Most of the changes apply to both Java and C/C++. Most changes were made under ticket #8319.
Benefits
In a MessageFormat pattern, an ASCII apostrophe can normally be written directly, rather than doubled or quadrupled. It now only begins quoted text when it precedes a character that requires quoting. A double ASCII apostrophe still yields a single one in format() output.
Sub-messages in choice/plural/select patterns are always checked for MessageFormat syntax.
There is a new, public parser for MessageFormat and choice/plural/select pattern strings, the class MessagePattern. It can be used in validation and translation tools, for example. The same parser is used in the message/choice/plural/select implementations.
Both named and numbered arguments can be used in a single pattern (with named-values APIs).
Details of the MessageFormat pattern syntax are widened (e.g., the identifier syntax), and are now documented in the class API docs.
Nested sub-messages are parsed once, during construction or applyPattern(), rather than in each format() call.
The MessageFormat object does not need nor create/cache Format objects for choice/plural/select arguments any more.
The C API now supports complex arguments (choice/plural/select) with arguments in sub-messages. (Previously, nested arguments were not parsed early enough for the format() value handling.)
The C API detects conflicting types for two arguments with the same number.
Achieving these benefits requires that a MessageFormat pattern is parsed fully, including nested choice/plural/select arguments and their sub-messages.
Resulting Incompatibilities
Note: The JDK-compatible apostrophe mode can be selected via MessageFormat API as well as a build-time option (see the enum ApostropheMode API doc).
Some patterns will fail to parse, or yield different results, because of the modified ASCII apostrophe handling.
Some patterns will fail to parse as stand-alone choice/plural/select patterns when their sub-messages do not contain correct MessageFormat syntax.
ChoiceFormat/PluralFormat/SelectFormat do not modify selected/returned sub-message strings.
In particular, they do not reduce ASCII apostrophes.
This is required so that the strings can be used in a MessageFormat without having to quadruple ASCII apostrophes.
MessageFormat.setFormat() and similar: (Setting of custom Format objects, ignoring the pattern argument specification)
toPattern() now normally returns the original pattern string, but will throw an exception if custom formats are set
MessageFormat.getFormat() and similar now return null for non-custom choice/plural/select arguments.
Java Serialization of MessageFormat is incompatible between pre-ICU-4.8 and ICU-4.8-and-above versions.
The C++ ChoiceFormat internal-array getters: getLimits(), getClosures(), getFormats() are now deprecated and disabled.
More Details
MessageFormat API doc & User Guide
ApostropheMode API doc
Design doc: MessageFormat 2011q1 together with the Questions & Decisions subpage
Updates in ICU 4.8.1 (C and J)
Time zone database version 2011h
Tickets
#8569 UTF-7 missing terminating shift character (C: r30175 → r30178, J: r30176 → r30177)
#8583 Currency parsing fix / API promotion (C: r30313,r30314,r30315 → r30349, J: r30314,r30315 → r30329)
#8589 Fallback logic used for partial location time zone format is wrong (C: r30149 → r30367, J: r30147,r30150 → r30368)
#8624 ucol_getSortKey+strncmp and ucol_strcoll give different comparison result (C: r30220 → r30353, J: r30219,r30221 → r30330)
#8627 Performance regression in ICU 4.8 time formatting with zones (C: r30196 → r30352, J: r30198 → r30348)
#8637 Java assertion error in PluralFormat (C: r30259,r30260 → r30355, J: r30259 → r30288)
#8696 Merge CLDR 2.0.1 (C: r30316,r30323,r30333 → r30341, J: r30344)
#8709 Spanish Currency, CLDR #4038 (C: r30356,r30357 → r30361, J: r30363)
Note: See following sections for ICU4C and ICU4J specific changes.
Updates in ICU 4.8.2 (C and J)
Japanese era Reiwa (令和) support
Time zone database version 2019a
The following CVEs were fixed in ICU4C 4.8.2:
CVE-2017-15422
CVE-2017-14952
CVE-2016-7415
CVE-2014-9654
CVE-2014-7926
CVE-2014-7923
CVE-2011-4599
(Note: The following CVEs were found to be not applicable to ICU 4.8.2: CVE-2014-8147, CVE-2014-8146 )
ICU4C Download
Latest ICU4C 4.8 Release
Version: 4.8.2
Release Date: 2019-04-11
Source and binary downloads are available on the git/GitHub tag page: https://github.com/unicode-org/icu/releases/tag/release-4-8-2
Previous ICU4C 4.8 Releases
Version: 4.8
Release Date: 2011-05-25
Docs, source & binaries for ICU4C 4.8
Version: 4.8.1
Release Date: 2011-07-20
Docs, source & binaries for ICU4C 4.8.1
Version: 4.8.1.1
Release Date: 2011-10-26
No API changes since ICU4J 4.8, see API Changes for changes since ICU4J 4.6
Full update list is in ticket #8823
Major ICU4C specific changes in 4.8.1.1:
#8719 Lenient Parsing behavior
#8777 Fixed docs with regards to Etc/Unknown
#8784 iSeries porting
#8801 fix performance regression in number parse
#8806 MessageFormat plural # formatting
#8820 cannot parse month names when month name starts with numeric character
#8824 read/use of uninitialized memory in RegexMatcher::MatchChunkAt()
#8864 tzdata2011k
Changes between ICU4C 4.8 and 4.8.1:
No API changes since ICU4J 4.8, see API Changes for changes since ICU4J 4.6
ICU4C specific changes in 4.8.1 (See the top section for common changes)
#8265 udata races when loading full set of ICU data (ucol_open U_FILE_ACCESS_ERROR) (r30326 → r30369)
#8535 ICU4C build failure on MinGW (r30094,r30095,r30247,r30249,r30250,r30252,r30253 → r30350)
#8576 Add some Khmer word break tests and fix some compiler warnings (r30327,r30328 → r30369)
#8578 Compiler warnings fixes (r30202,r30205 → r30355, r30202,r30205 → r30207)
#8585 "pkg_gencmn fails with ""gencmn: out of memory"" on z/OS 1.11" (r30204 → r30355)
#8593 Infinite recursion crash using UNUM_SPELLOUT to format NAN (r30258 → r30367)
#8595 gcc 4.5.2 compile warnings about UResType (r30295,r30310 → r30352)
#8613 fix a trivial bug found by PSV (a static analysis tool) (r30188 → r30355)
#8621 "#include of ""unum.h"" missing ""unicode/"", breaks our build" (r30257 → r30349)
#8622 UCONFIG_NO_SERVICE=1 doesn't work due to change in ucurr.cpp (r30256 → r30349)
#8629 colldata.cpp, unsafe memcpy of UnicodeStrings (r30254 → r30355)
#8643 runConfigureICU stomps on LDFLAGS for SolarisX86 (r30224 → r30355)
#8654 Spoof Check, Invisible Char check problem (r30218,r30222 → r30353)
#8657 LESwaps.h is broken on big endian machines (r30274 → r30367)
#8673 Unsafe memcpy of RuleBasedBreakIterator object (r30255 → r30355)
#8675 icu::DateFormat, icu::SimpleDateFormat fails to parse full string on second attempt in 4.8 (r30266,r30282 → r30349)
#8681 Asymmetric search needs a bigger CE ring buffer (r30307 → r30353)
#8691 UnicodeString::startsWith(const UChar *, -1 for NUL-terminated) fails (r30292 → r30353)
ICU4C Supported Platforms
Key to testing frequency
Frequently tested
ICU will work on these platforms with these compilers
Rarely tested
ICU has been ported to these platforms but may not have been tested there recently
ICU4J Download
Latest ICU4J 4.8 Release
Version: 4.8.2
Release Date: 2019-04-11
Source and binary downloads are available on the git/GitHub tag page: https://github.com/unicode-org/icu/releases/tag/release-4-8-2
Maven dependency:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>4.8.2</version>
</dependency>
Previous ICU4J 4.8 Releases
Version: 4.8.1.1
Release Date: 2011-08-24
Back ported Java 7 Locale support features from the trunk
ICU4J 4.8.1 issues fixed in the 4.8.1.1 release:
Version: 4.8.1
Release Date: 2011-07-20
No API changes since ICU4J 4.8, see API Changes for changes since ICU4J 4.6
ICU4J specific changes (See the top section for common changes)
#8484 endless loop in RuleBasedCollator.getSortKeyBytes (r30184 → r30286)
#8522 Use special bucket labels for AlphabeticIndex (r30325 → r30372)
#8626 TimeZone.getTimeZone and TimeZone.getDefault raise AssertionError (r30197 → r30287)
#8634 Java assertion errors in SpoofChecker (r30264,r30265 → r30351)
#8640 Missing serialization compatibility test data for 4.6 (r30208 → r30209)
#8642 Add API data for future API change report in ICU4J (r30213 → r30214)
#8662 Expose API needed by CLDR (as @internal) (r30225 → r30289)
#8664 Custom replacement character problem in ICU4J charset converter (r30284 → r30345)
#8710 Fix compiler warnings in ICU4J 4.8.1 (r30358,r30359 → r30362)
Version: 4.8
Release Date: 2011-05-25