Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/41: Рейтинг темы: голосов - 41, средняя оценка - 4.61
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130

Работа с iconv-lite (проблемы с кодировкой)

10.05.2020, 10:04. Показов 8327. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Суть задания такова Написать приложение для выполнения под ОС Android, которое
переводит текст в одной кодировке (например win-1251) и записывает
содержимое в другой кодировке (например utf-8) и обратную задачу.
Возникла проблема с кодировкой делаю вот
JavaScript
1
2
3
4
5
6
7
8
9
10
11
const convertItem = (text,key) =>{
    var iconv = require('iconv-lite');
    var buf = iconv.encode(text, 'win1251');
    var str = iconv.decode(buf, 'utf8');
    setValue(old=>old.map((value)=>{
      if(value.key==key){
        value.text = str
      }
      return value
    }))
  }
И в обратную сторону вот так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
const convertItem = (text,key) =>{
    var iconv = require('iconv-lite');
    var buf = iconv.encode(text, 'utf8');
    var str = iconv.decode(buf, 'win1251');
    setValue(old=>old.map((value)=>{
      if(value.key==key){
        value.text = str
      }
      return value
    }))
  }
Как вы могли догадаться, ничего не работает. Как будет правильней реализовать данную задачу?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2020, 10:04
Ответы с готовыми решениями:

Не работает iconv: Fatal error: Call to undefined function iconv()...
Доброе время суток! Подскажите пожалуйста, почему может не работать функция iconv? Версия php 5.1.6, установлен на системе...

PHPExcel Notice: iconv() [function.iconv]: Detected an illegal character in input string!
Блин задолбала эта библиотека!!! Выдает 2 ошибки!!! : Detected an illegal character in input string in...

ICONV - зачем нужна iconv.output_encoding и иже с ней?
Добрый вечер. Есть вопрос по расширению ICONV для преобразования кодировок. Кто-нибудь знает, для чего нужны переменные...

16
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
10.05.2020, 12:20
Halacky, сначала - decode, потом - encode.
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
10.05.2020, 14:27  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
Halacky, сначала - decode, потом - encode.
А как мне получить buf?
Мы же сначала получаем массив байт (то есть получаем текст в виде массива из байт), для это используем encode
А потом уже этот массив уже обратно в слово, но уже в другой кодировке.
Разве нет?
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
10.05.2020, 14:33
Цитата Сообщение от Halacky Посмотреть сообщение
А как мне получить buf?
Halacky, как-то так
JavaScript
1
const buf = Buffer.from(text, 'binary');
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
10.05.2020, 14:58  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
Halacky, как-то так
const buf = Buffer.from(text, 'binary');
К сожалению проблема не решилась.
При вызове, методов русские символы отображаются некоректно.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
const convertItem = (text,key) =>{
    var iconv = require('iconv-lite');
    const buf = Buffer.from(text, 'binary');
    var str = iconv.decode(buf, 'utf8');
    setValue(old=>old.map((value)=>{
      if(value.key==key){
        value.text = str
      }
      return value
    }))
  }
И при вызове обратного метода, который по моей логике должен был отобразить русские символы нормально. Не как задумывалось
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
10.05.2020, 15:07
Halacky, смотрите, у Вас изначально есть строка в какой-то кодировке(набор байт), значит нужно сначала декодировать набор байт, а затем закодировать строку в новой кодировке.
JavaScript
1
2
3
  const buf = Buffer.from(text, "binary");
  const str = iconv.decode(buf, "win1251");
  const bufUtf8 = iconv.encode(str, "utf-8");
Но так как в ноде мы работаем со строками в utf-8, то можно просто декодировать
JavaScript
1
2
  const buf = Buffer.from(text, "binary");
  const str = iconv.decode(buf, "win1251");
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
11.05.2020, 05:33  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
смотрите, у Вас изначально есть строка в какой-то кодировке(набор байт), значит нужно сначала декодировать набор байт, а затем закодировать строку в новой кодировке.
День новый-проблемы старые.
Переписал вот так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const convertItem = (text,key) =>{
    var iconv = require('iconv-lite');
    const buf = Buffer.from(text, "binary");
    const str = iconv.decode(buf, "win1251");
    setValue(old=>old.map((value)=>{
      if(value.key==key){
        value.text = str
      }
      return value
    }))
  }
  const convertItem2 = (text,key) =>{
    var iconv = require('iconv-lite');
    const buf = Buffer.from(text, "binary");
    const str = iconv.decode(buf, "utf8");
    setValue(old=>old.map((value)=>{
      if(value.key==key){
        value.text = str
      }
      return value
    }))
  }
При вызове любого из этих методов, результат одинаково неправильный. Русские символы отображаются некоректно. Хотя обе кодировки "работают" с русскими символами. Может в процессе кодирования\декодирования, теряется часть байтов. хм
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
11.05.2020, 06:37
Halacky, откуда text приходит? Если его вывести без преобразования как он будет выглядеть(скиньте иероглифы)?
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
11.05.2020, 07:25  [ТС]
При вводе сообщения я не трогаю кодировку вообще.
Потом только обрабатываю простое нажатие и долгое нажатие, для смены кодировки.
То есть если вводить просто текст, все работает корректно. (Первая фотка)
При обычном нажатии вызывается метод ConvertItem (Вторая фотка)
При долгом нажатии вызывается метод ConvertItem2
Миниатюры
Работа с iconv-lite (проблемы с кодировкой)   Работа с iconv-lite (проблемы с кодировкой)  
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
11.05.2020, 07:44
Halacky, так у Вас изначально текст в utf-8, а в ConvertItem Вы его пытаетесь декодировать как win1251
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
11.05.2020, 08:18  [ТС]
Я получаю код изначально в utf-8, мне нужно перевести этот же текст в win1251
Потом обратную операцию. Как бы я не кодировал\декодировал, ответ тот же остается. Неправильный
1
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
11.05.2020, 08:39
Halacky, понял, Вы строки гоняете, туда сюда. Тут нужно подумать, может часть будет теряться.
Самый простой вариант - хранить изначальный буфер.
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
11.05.2020, 08:43  [ТС]
В репозитории у iconv-lite нашел упоминание о том, что могут возникнуть проблемы при перегоне из кодировки в кодировку
Они предложили вот такой вариант.
https://github.com/ashtuchkin/... n-decoding
Но я не понял как прикрутить это к моему проекту. (т.к. в целом с js я познакомился дня два назад)
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
11.05.2020, 09:03
Halacky, да, получается нельзя туда-сюда конвертить строки(ну это было ожидаемо). Нужно хранить исходную строку. Т.е. первый раз когда вводите строку в utf-8 сохраните ее куда-нибудь. И только ее конвертите в нужную кодировку.

Добавлено через 5 минут
Вообще странное занятие Получается сконверченые строки показываться в приложении будут неверно(т.е. из них не получить исходную строку), т.к. выводятся они
как utf-8.
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
11.05.2020, 09:11  [ТС]
Ну вот такое у нас задание дали, а главное методичку скинули, а там про то как сайт верстать
Я сделал скрипт для кодирования\декодирования из txt документа и все работает
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FSO = new ActiveXObject("Scripting.FileSystemObject"); 
var t_file = FSO.OpenTextFile("E:\\OC\\3\\1\\read.txt" , 1,true); 
 
source = t_file.ReadAll();
 
var x=strConv(source,"windows-1251","utf-8");
 
new ActiveXObject("Scripting.FilesystemObject").openTextFile("E:\\OC\\3\\1\\\write.txt",2,true).write(x);
 
function strConv(txt, sourceCharset, destCharset)
{
  with(new ActiveXObject("ADODB.Stream"))
  {
    type=2, mode=3, charset=destCharset;
    open();
    writeText(txt);
    position=0, charset=sourceCharset;
    return readText();
 }
}
И вот обратно
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var source1 = new ActiveXObject("Scripting.FileSystemObject").OpenTextFile("E:\\OC\\3\\1\\write.txt", 1,true).ReadAll();
var x1=strConv(source1,"utf-8",C);
new ActiveXObject("Scripting.FilesystemObject").openTextFile("E:\\OC\\3\\1\\result.txt",2,true).write(x1);
function strConv(txt, sourceCharset, destCharset)
{
  with(new ActiveXObject("ADODB.Stream"))
  {
    type=2, mode=3, charset=destCharset;
    open();
    writeText(txt);
    position=0, charset=sourceCharset;
    return readText();
 }
}
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
11.05.2020, 09:18
Цитата Сообщение от Halacky Посмотреть сообщение
Я сделал скрипт для кодирования\декодирования из txt документа и все работает
Halacky, а в этом и прикол, что на файлах все будет нормально работать, так как нет лишних преобразований Может Вам нужно тестовые файлы конвертить, а не в текст в поле?
0
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
11.05.2020, 09:21  [ТС]
Во, смотрите. Полностью задание.
Напишите приложение для выполнения под ОС Android, которое
переводит текст в одной кодировке (например win-1251) и записывает
содержимое в другой кодировке (например koi-8) и обратную задачу.
Приложение должно содержать текстовые поля для ввода, а также иметь
возможность загружать текстовый файл с текстом в исходной кодировке и
сохранять в текстовый файл переведенный текст на ваше мобильное
устройство.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2020, 09:21
Помогаю со студенческими работами здесь

проблемы с кодировкой
подскажите плиз, вместо русского языка отображаются иероглифы в access, видимо проблемы с кодировкой или шрифтами, версиия 2007, заранее...

Проблемы с кодировкой
Помогите пожалуйста. От php я ваще далекий(((, не могу справить с кодировкой. Вот сайт -http://topmuz.com.ua/muzics/a чуть ниже плеер,...

Проблемы с кодировкой
Не давно поставил windows7. Заметил, что во всех браузерах, на некоторых сайтах, что-то с кодировкой, менять настройки браузера не...

Проблемы с кодировкой
Есть парсер (плагин для Joomla). Парсирует такого рода .csv файлы сохраненные с помощью EXCEL КГН;1 x 185;32,7;2490 КГН;1 x...

Проблемы с кодировкой
До не давно все было хорошо. Вот такая проблема - Например в место того чтоб писало нормально пишет вот что - ������ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru