12.10.7.1 Набор символов cp932
Почему нужен cp932?
В MySQL набор символов sjis соответствует набору символов Shift_JIS, определенному IANA, который поддерживает символы JIS X0201 и JIS X0208. (См. http://www.iana.org/assignments/character-sets.)
Однако значение “SHIFT JIS” как описательного термина стало очень расплывчатым, и оно часто включает расширения к Shift_JIS, определенные различными поставщиками.
Например, “SHIFT JIS” в японских средах Windows является расширением Microsoft набора Shift_JIS, и его точное название — Microsoft Windows Codepage : 932 или cp932. В дополнение к символам, поддерживаемым Shift_JIS, cp932 поддерживает расширенные символы, такие как специальные символы NEC, выбранные символы NEC — расширенные символы IBM и выбранные символы IBM.
Многие японские пользователи сталкивались с проблемами при использовании этих расширенных символов. Эти проблемы обусловлены следующими факторами:
MySQL автоматически преобразует наборы символов.
Наборы символов преобразуются с использованием Unicode (
ucs2).Набор символов
sjisне поддерживает преобразование этих расширенных символов.Существует несколько правил преобразования из так называемого “SHIFT JIS” в Unicode, и некоторые символы преобразуются в Unicode по-разному в зависимости от правила преобразования. MySQL поддерживает только одно из этих правил (описанное позже).
Набор символов MySQL cp932 разработан для решения этих проблем.
Поскольку MySQL поддерживает преобразование наборов символов, важно разделить IANA Shift_JIS и cp932 на два разных набора символов, так как они обеспечивают разные правила преобразования.
Чем cp932 отличается от sjis?
Набор символов cp932 отличается от sjis следующим образом:
cp932поддерживает специальные символы NEC, выбранные символы NEC — расширенные символы IBM и выбранные символы IBM.-
У некоторых символов
cp932есть два разных кода, оба из которых преобразуются в один и тот же код Unicode. При преобразовании из Unicode обратно вcp932необходимо выбрать один из кодов. Для этого “обратного преобразования” используется правило, рекомендованное Microsoft. (См. http://support.microsoft.com/kb/170559/EN-US/.)Правило преобразования работает следующим образом:
Если символ присутствует как в JIS X 0208, так и в специальных символах NEC, используется код JIS X 0208.
Если символ присутствует как в специальных символах NEC, так и в выбранных символах IBM, используется код специальных символов NEC.
Если символ присутствует как в выбранных символах IBM, так и в выбранных расширенных символах IBM — NEC, используется код расширенных символов IBM.
Таблица, показанная по адресу https://msdn.microsoft.com/en-us/goglobal/cc305152.aspx, содержит информацию о значениях Unicode для символов
cp932. Для записей таблицыcp932с символами, под которыми появляется четырехзначное число, это число представляет соответствующее кодирование Unicode (ucs2). Для записей таблицы с подчеркнутым двухзначным значением присутствует диапазон значений символовcp932, начинающихся с этих двух цифр. Нажатие на такую запись таблицы перенаправляет вас на страницу, где отображается значение Unicode для каждого из символовcp932, начинающихся с этих цифр.Следующие ссылки представляют особый интерес. Они соответствуют кодировкам следующих наборов символов:
-
Специальные символы NEC (старший байт
0x87): -
Выбранные символы NEC — расширенные символы IBM (старший байт
0xEDи0xEE): -
Выбранные символы IBM (старший байт
0xFA,0xFB,0xFC):
cp932поддерживает преобразование пользовательских символов в сочетании сeucjpmsи решает проблемы с преобразованиемsjis/ujis. Подробности см. в http://www.sljfaq.org/afaq/encodings.html.
Для некоторых символов преобразование в ucs2 и из него отличается для sjis и cp932. Следующие таблицы иллюстрируют эти различия.
Преобразование в ucs2:
sjis/cp932 Значение |
sjis -> ucs2 Преобразование |
cp932 -> ucs2 Преобразование |
|---|---|---|
| 5C | 005C | 005C |
| 7E | 007E | 007E |
| 815C | 2015 | 2015 |
| 815F | 005C | FF3C |
| 8160 | 301C | FF5E |
| 8161 | 2016 | 2225 |
| 817C | 2212 | FF0D |
| 8191 | 00A2 | FFE0 |
| 8192 | 00A3 | FFE1 |
| 81CA | 00AC | FFE2 |
Преобразование из ucs2:
ucs2 значение |
ucs2 -> sjis Преобразование |
ucs2 -> cp932 Преобразование |
|---|
© 2025 Oracle
Licensed under the GPLv2 License.