Настройка локали в консоли в CentOS 4.x-6.x

centos_logo_45Частенько владельцы выделенных серверов получают свои сервера от провайдеров с неверно сконфигурированной локалью. Как следствие в консоли не отображаются русские буквы. На тему русификации уже написана гора всяческих заметок, но я в двух словах опишу методы установки правильной локали в CentOS linux 4.x, 5.x, 6.x. Так как CentOS грубо говоря является клоном RedHat Enterprize Linux, то консоль использует кодировку UTF-8 то есть юникод. Ну так вот у них повелось. Лично мое мнение — юникод рулит. Постепенно юникод вытесняет кучу наших кодировок типа CP1251, KOI8-R. И это очень хорошо. Потому как так достали все эти прибабахи с кодировками — спасу нет. (далее…)

Лечим кодировку при экспорте CSV в Redmine

redmineПоставил недавно последний Redmine 2.x. Обнаружилось что при экспорте в формат CSV неверно отображаются русские символы. Поэтому в нем хочу добавить простенькое решение. Итак, открываем файл ru.yml. У меня он находится по пути:

/usr/local/share/redmine/config/locales/ru.yml

Ищем строку с параметром general_csv_encoding и меняем значение с UTF-8 на WINDOWS-1251:

# Было
general_csv_encoding: UTF-8

# Стало
general_csv_encoding: WINDOWS-1251

Перезапускаем Redmine.

UPD От пользователя Bozo: «Экспорт в csv происходит нормально, но в utf без bom. А глупые мс-продукты при виде utf без bom сходят с ума. Так что нужно всего лишь добавлять bom к созданному csv-файлу. Это можно реализовать микро-плагином за 10 минут.»

Плагин от Bozo:

require_dependency ‘queries_helper’

module BOMFixQueriesHelperPatch
def self.included(base)
base.send(:include, InstanceMethods)

base.class_eval do
alias_method_chain :query_to_csv, :fixed_bom
end
end

module InstanceMethods

# adds bom symbols to utf-encoded csv file
def query_to_csv_with_fixed_bom *args
ret = query_to_csv_without_fixed_bom *args
if l(:general_csv_encoding) == ‘UTF-8′
ret = “\xef\xbb\xbf”+ret
end
ret
end

end
end

Знаки вопроса в redmine

После установки свеженького redmine обнаружилась проблема с отображением русских символов. Вместо них были только знаки вопроса. Для решения данной проблемы опишем небольшой скрипт на bash, естественно предварительно забекапив базу:

#!/bin/sh
mysqldump -u root -ppassword --default-character-set=latin1 -c --insert-ignore \
--skip-set-charset redmine > dev.db
for i in dev; do iconv -f ISO-8859-1 -t UTF-8 <$i.db >${i}8.db; done

for i in *8.db; do perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' $i; done

for i in redmine; do \
  mysql --user=root -ppassword --execute "DROP DATABASE $i; CREATE DATABASE $i \
  CHARACTER SET utf8 COLLATE utf8_general_ci;"; \
done

mysql --user=root -ppassword --max_allowed_packet=16M --default-character-set=utf8 \
  redmine < dev8.db

Если это не помогло, то необходимо произвести настройку на стороне сервера. Открываем файл /etc/mysql/my.cnf и сравниваем с моим: (далее…)