Download the ICU 4.8 Release


ICU is the premier library for software internationalization. ICU 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

ICU4J Specific Changes

    • Technology Preview: APIs for region information. The new class 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

    • #8535 & #8537 (C only) Prebuilt binaries are usable on MinGW but the MinGW build is broken

    • #8571 (C only) U_HIDE_DRAFT_API does not operate on the correct set of APIs; might also affect U_HIDE_DEPRECATED_API, U_HIDE_INTERNAL_API and U_HIDE_SYSTEM_API

Details about MessageFormat Changes

Most of the changes apply to both Java and C/C++. Most changes were made under ticket #8319.


    • 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

Updates in ICU 4.8.1 (C and J)

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:

Previous ICU4C 4.8 Releases

Version: 4.8

Release Date: 2011-05-25

Version: 4.8.1

Release Date: 2011-07-20


Release Date: 2011-10-26

  • ReadMe

    • 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

      • #8657, #8817 fix layout/LESwaps.h endianness test

      • #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 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:

Maven dependency:






Previous ICU4J 4.8 Releases


Release Date: 2011-08-24

Version: 4.8.1

Release Date: 2011-07-20

Version: 4.8

Release Date: 2011-05-25