Обнаружение одиночного символа CJK

#perl #encoding #utf-8 #cjk

#perl #кодирование #utf-8 #cjk

Вопрос:

У меня есть строка, которая может быть либо английским словом, либо одним символом CJK. Я гарантирую, что эта строка находится в кодировке UTF-8. Я работаю внутри скрипта perl.

Проблема более высокого уровня заключается в том, что у меня есть массив строк, подобный описанному выше. Я выполняю объединение » » @array. Я хочу знать, чтобы не добавлять пробел, когда его CJK.

Итак, для CJK я просто сделаю join «» @array .

Я осмотрелся, но не могу найти этот точный вопрос.

Спасибо.

Ответ №1:

Вы могли бы использовать регулярное выражение p{InCJK_Unified_Ideographs} . Это блок Unicode (в отличие от сценариев Unicode, которые также поддерживаются Perl, но, похоже, не соответствуют описанию вашей проблемы).

Есть несколько других блоков-кандидатов, таких как расширение A и дополнение Radicals. Вот полный список.

Комментарии:

1. Это сработало отлично! Я не знал о блоках Unicode. Что вы подразумеваете под своим определителем? Существует ли опасность того, что некоторые символы CJK не будут распознаны? Или что означают классы Unicode?

2. @YGomez: Рад, что это помогло. Когда вы писали этот комментарий, я уже обновил ответ и удалил «классы» из текста. Взгляните на ссылку, которую я добавил, она все довольно хорошо объясняет.

3. О, я понимаю, что вы имеете в виду. Я просмотрю список блоков, чтобы убедиться, что все возможные входные данные охвачены. Спасибо за ссылку.