Используя JavaScript для усечения текста к определенному размеру (8 КБ)

TDD является лучшим подходом каждый раз, когда выполнимо сделать так. Тестирование TDD является автоматическим, измеримым через покрытие кода и надежный метод удостоверяющегося качества кода.

Ручное тестирование требует огромного количества времени (по сравнению с TDD) и страдает от человеческой ошибки.

нет ничего, говоря, что TDD означает, что только разработчики тестируют. Разработчики должны быть ответственными за кодирование процента среды тестирования. QA должен быть ответственен за намного большую часть. Разработчики тестируют API путем, они хотят протестировать их. QA тестирует API способами, которыми я действительно никогда не думал бы к и делаю вещи, которые, в то время как на вид сумасшедший, на самом деле сделаны клиентами.

8
задан JoshDM 7 August 2013 в 16:48
поделиться

3 ответа

Если вы используете однобайтовую кодировку, да, 8192 символа = 8192 байта. Если вы используете UTF-16, 8192 символа (*) = 4096 байтов.

(Фактически 8192 кодовых точки, что немного отличается от суррогатов, но давайте не будем об этом беспокоиться, потому что JavaScript не .)

Если вы используете UTF-8, есть быстрый трюк, который вы можете использовать для реализации кодировщика / декодера UTF-8 в JS с минимальным кодом:

function toBytesUTF8(chars) {
    return unescape(encodeURIComponent(chars));
}
function fromBytesUTF8(bytes) {
    return decodeURIComponent(escape(bytes));
}

Теперь вы можете выполнить усечение с помощью:

function truncateByBytesUTF8(chars, n) {
    var bytes= toBytesUTF8(chars).substring(0, n);
    while (true) {
        try {
            return fromBytesUTF8(bytes);
        } catch(e) {};
        bytes= bytes.substring(0, bytes.length-1);
    }
}

(Причина для улова попытки есть то, что если вы усекаете байты в середине многобайтовой последовательности символов, вы получите недопустимый поток UTF-8, и decodeURIComponent пожалуется.)

Если это другая многобайтовая кодировка, такая как Shift-JIS или Big5, вы сами по себе.

11
ответ дан 5 December 2019 в 11:25
поделиться

Нет, предположить, что 8 КБ текста составляет 8192 символа, небезопасно, поскольку в некоторых кодировках символов каждый символ занимает нескольких байтов .

Если вы читая данные из файлов, не могли бы вы просто захватить файл? Или прочитать его кусками по 8 КБ?

2
ответ дан 5 December 2019 в 11:25
поделиться

Как говорит Доминик, проблема заключается в кодировке символов - однако, если вы можете действительно , убедитесь, что вы будете иметь дело только с 8-битными символами (маловероятно, но возможно) или примите 16-битные символы и ограничьте себя половиной доступного пространства, то есть 4096 символов, тогда вы можете попробовать это.

Это плохая идея полагаться на JS для этого, хотя, потому что он может быть тривиально изменен или проигнорирован, и у вас есть сложности escape-символы и кодировка, с которыми нужно иметь дело, например. Лучше использовать JS в качестве первого фильтра и использовать любой доступный серверный язык (который также откроет сжатие).

1
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: