Выбор строк и чувствительности к регистру

Проблема в том, что вы пытаетесь напечатать символ юникода, но ваш терминал не поддерживает его.

Вы можете попробовать установить пакет language-pack-en, чтобы исправить это:

sudo apt-get install language-pack-en

, который обеспечивает обновление данных перевода на английском языке для всех поддерживаемых пакетов (включая Python). При необходимости установите другой языковой пакет (в зависимости от того, какие символы вы пытаетесь распечатать).

В некоторых дистрибутивах Linux это необходимо, чтобы убедиться, что локальные английские локали установлены правильно (так что символы Unicode может обрабатываться оболочкой / терминалом). Иногда его проще установить, чем настраивать вручную.

Затем при написании кода убедитесь, что вы используете правильную кодировку в своем коде.

Например:

open(foo, encoding='utf-8')

Если у вас все еще есть проблема, дважды проверьте конфигурацию вашей системы, например:

  • Ваш языковой файл (/etc/default/locale), который должен иметь, например,
    LANG="en_US.UTF-8"
    LC_ALL="en_US.UTF-8"
    
  • Значение LANG / LC_CTYPE в оболочке.
  • Проверьте, какой язык поддерживает ваша оболочка:
    locale -a | grep "UTF-8"
    

Демонстрация проблемы и решения в новой виртуальной машине.

  1. Инициализация и предоставление виртуальной машины (например, с помощью vagrant ):
    vagrant init ubuntu/trusty64; vagrant up; vagrant ssh
    
    Смотрите: доступные ящики Ubuntu ..
  2. Печать символов юникода (например, знак торговой марки как ):
    $ python -c 'print(u"\u2122");'
    Traceback (most recent call last):
      File "", line 1, in 
    UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 0: ordinal not in range(128)
    
  3. Теперь установка language-pack-en:
    $ sudo apt-get -y install language-pack-en
    The following extra packages will be installed:
      language-pack-en-base
    Generating locales...
      en_GB.UTF-8... /usr/sbin/locale-gen: done
    Generation complete.
    
  4. Теперь проблема решена:
    $ python -c 'print(u"\u2122");'
    ™
    

34
задан Peter Mortensen 26 December 2018 в 15:23
поделиться

2 ответа

PowerShell принципиально нечувствителен к регистру (например, "HEy" -like "hey" - True).

Если вы хотите использовать регистрозависимую версию like, используйте -clike.

60
ответ дан Peter Mortensen 26 December 2018 в 15:23
поделиться

По умолчанию чувствительность к регистру отключена:

PS> 'test','TEST','TeSt','notest' | ? { $_ -like 'test' }
test
TEST
TeSt

Из документации:

По умолчанию все операторы сравнения не чувствительны к регистру. Чтобы сделать оператор сравнения чувствительным к регистру, перед именем оператора поставьте "c". Например, чувствительная к регистру "-eq" является "-ceq". Чтобы сделать нечувствительность к регистру в явном виде, перед оператором ставится символ "i". Для например, явно версия "-eq", не чувствительная к регистру, имеет вид "-ieq".

Для получения дополнительной информации запустите help about_comparison_operators

32
ответ дан LotPings 26 December 2018 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: