[Решено] Проблемы с кириллицей bash

Автор malyshevr, 20 апреля 2023, 09:00:43

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

malyshevr

Всем привет, у меня есть скрипт который каждый день делает выгрузку за послдении 5 дней данных из бд и сохраняет результат файл + добавляет 1 строчку в начале файла, проблема в том что при конвертации в xls через uniconv заголовки выглядят так Р"араж.номер и не совсем понятно что с этим делать.
#!/usr/bin/env bash

# Absolute path to this script, e.g. /home/user/bin/foo.sh
SCRIPT=$(readlink -f "$0")
# Absolute path this script is in, thus /home/user/bin
SCRIPT_PATH=$(dirname "$SCRIPT")
REPORT_PATH=$(realpath "$SCRIPT_PATH/../storage/app/public/reports")
# Number of days for keeping in database
HISTORY_PERIOD_IN_DAYS=5
# Start hour of transport day
START_HOUR=5

DATE_STAMP_PREV=$( date --date="-$HISTORY_PERIOD_IN_DAYS day" "+%Y-%m-%d $START_HOUR:00:00" )
DATE_STAMP=$( date "+%Y-%m-%d $START_HOUR:59:59" )
FILENAME="$REPORT_PATH/reports_"$( date "+%Y%m%d_%H%M%S" )".csv"

[ ! -d $REPORT_PATH ] && mkdir $REPORT_PATH && chmod a+w $REPORT_PATH
[ -f $FILENAME ] && rm -f $FILENAME
touch $FILENAME
QUERY="\copy (
MY QUERY
) to '$FILENAME' CSV"

psql "postgresql://postgres:postgres@IP/DB" -c "$QUERY"

sed -i '1s;^;Заголовок 1, Заголовок 2\n;' $FILENAME



file -i FILENAME
myfile.csv: text/plain; charset=utf-8


unoconv --format  xls myfile.csv


unoconv --version

unoconv 0.7
Written by Dag Wieers <dag@wieers.com>
Homepage at http://dag.wieers.com/home-made/unoconv/

platform posix/linux
python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0]
LibreOffice 6.1.5.2


info locale

locale
LANG=en_US.utf8
LANGUAGE=en_US:en
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

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

unoconv --format  xls -i FilterOptions=34 -e FilterOptions=76 myfile.csv

так же пробовал вот это

localectl set-locale LANG=ru_RU.utf8


Пробовал dos2unix но увы результат тот же
[свернуть]

ChubaDuba

#1
Цитата: malyshevr от 20 апреля 2023, 09:00:43file -i FILENAME
myfile.csv: text/plain; charset=utf-8
С помощью iconv перекодировать в CP1251 (windows-1251).

malyshevr

#2
Цитата: ChubaDuba от 20 апреля 2023, 11:26:41
Цитата: malyshevr от 20 апреля 2023, 09:00:43file -i FILENAME
myfile.csv: text/plain; charset=utf-8
С помощью iconv перекодировать в CP1251 (windows-1251).

увы не помогло :(

iconv -f UTF-8 -t CP1251 test_20230420_051502.csv > test_20230420_0515022.csv
file test_20230420_0515022.csv
test_20230420_0515022.csv: ISO-8859 text
output:
�����.�����, �������������, ���� ������, ������� ������, ���� ���������, ������� ���������, ���� ���������������, ������� ���������������


unoconv --format  xls test_20230420_0515022.csv
output:
Ãàðàæ.íîìåð

p.s. меня терзают мысли по поводу того что эта проблема связана с локализацией в самой системе, возможно что то нужно поставить или настроить но что я не совсем понимаю...

20 апреля 2023, 18:20:18
upd. нашел решение

поправил файлик  - nano /etc/locale.gen

выполнил команду - sudo dpkg-reconfigure locales
  en_US.UTF-8... done
  ru_RU.ISO-8859-5... done
  ru_RU.CP1251... done
  ru_RU.UTF-8... done
Generation complete.

далее - iconv -f UTF-8 -t CP1251 test_20230420_181657.csv > test2_20230420_181657.csv

результат положительный :) получил то что нужно