“icuv: Streaming API” – оптимизация преобразования кодировки символов
Преобразование кодировки символов — важнейшая задача при разработке программного обеспечения при работе с многоязычным текстом. Библиотека iconv предоставляет мощное и эффективное решение для преобразования кодировок символов в различных языках программирования. В этой статье блога мы рассмотрим API потоковой передачи, предлагаемый iconv, и обсудим несколько методов с примерами кода, демонстрирующими его использование.
Методы API потоковой передачи:
- Метод 1: преобразование строки
Самый простой способ использования API потоковой передачи iconv — преобразовать строку из одной кодировки в другую. Вот пример на Python:
import iconv
input_str = "Hello, こんにちは, 你好"
output_str = iconv.convert(input_str, "utf-8", "latin1")
print(output_str)
- Метод 2. Преобразование файла
API потоковой передачи также позволяет конвертировать кодировку всего файла. Вот пример на JavaScript:
const fs = require("fs");
const iconv = require("iconv-lite");
const inputFile = "input.txt";
const outputFile = "output.txt";
const inputEncoding = "utf-8";
const outputEncoding = "iso-8859-1";
const inputStream = fs.createReadStream(inputFile);
const outputStream = fs.createWriteStream(outputFile);
inputStream
.pipe(iconv.decodeStream(inputEncoding))
.pipe(iconv.encodeStream(outputEncoding))
.pipe(outputStream);
- Метод 3. Преобразование потока
Если вы работаете с данными, которые передаются в потоковом режиме, вы можете напрямую преобразовать кодировку потока. Вот пример на Java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.input.ReaderInputStream;
import org.apache.commons.io.output.WriterOutputStream;
public class IconvExample {
public static void main(String[] args) throws Exception {
InputStream inputStream = new FileInputStream("input.txt");
OutputStream outputStream = new FileOutputStream("output.txt");
Charset inputCharset = Charset.forName("utf-8");
Charset outputCharset = Charset.forName("iso-8859-1");
inputStream = new ReaderInputStream(inputStream, inputCharset);
outputStream = new WriterOutputStream(outputStream, outputCharset);
IOUtils.copy(inputStream, outputStream);
inputStream.close();
outputStream.close();
}
}