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

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

10.05.2020, 10:04. Показов 8209. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru