Кодировка преобразования в Java

Обычно я делаю общую фильтрацию по строкам следующим образом:

criterion = lambda row: row['countries'] not in countries
not_in = df[df.apply(criterion, axis=1)]
30
задан zb226 30 January 2019 в 15:30
поделиться

3 ответа

Вам не нужна библиотека вне стандартной - просто используют Набор символов . (Можно просто использовать Строковых конструкторов и getBytes методы, но лично мне не нравится просто работать с названиями кодировок символов. Слишком много комнаты для опечаток.)

РЕДАКТИРОВАНИЕ: Как указано в комментариях, можно все еще использовать экземпляры Набора символов, но иметь простоту использования Строковых методов: новая Строка (байты, набор символов) и String.getBytes (набор символов) .

См." URL Кодировать (или: 'Что те" %20" коды в URL?') ".

41
ответ дан VonC 30 January 2019 в 15:30
поделиться
  • 1
    Как дополнительное примечание, " недавний versions" здесь средства после 0.10.2 ~ > 0,11 архитектурных модернизации и "-i" опция назад совместима с ipython 0.10.2 (я могу подтвердить), и, вероятно, понизьтесь (я могу размышлять). – DreadPirateShawn 26 September 2013 в 18:10

CharsetDecoder должен быть тем, что Вы ищете, нет?

Много сетевых протоколов и файлов снабжают свои символы байтовым набором символов такой как ISO-8859-1 (ISO-Latin-1).
Однако собственная кодировка символов Java Unicode UTF16BE (Шестнадцатиразрядный Формат Преобразования UCS, обратный порядок байтов).

См. Charset . Это не означает UTF16, набор символов по умолчанию (т.е.: значение по умолчанию, "отображающееся между последовательностями шестнадцатиразрядных элементы кода Unicode и последовательностями байтов"):

Каждый экземпляр виртуальной машины Java имеет набор символов по умолчанию, который может или не может быть одним из стандартных наборов символов.
[US-ASCII, ISO-8859-1 иначе ISO-LATIN-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16]
набор символов по умолчанию определяется во время запуска виртуальной машины и обычно зависит от локали и набора символов, используемого базовой операционной системой.

Этот пример демонстрирует, как преобразовать ISO-8859-1 закодированные байты в ByteBuffer к строке в CharBuffer и стих визы.

// Create the encoder and decoder for ISO-8859-1
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

try {
    // Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
    // The new ByteBuffer is ready to be read.
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));

    // Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    // The new ByteBuffer is ready to be read.
    CharBuffer cbuf = decoder.decode(bbuf);
    String s = cbuf.toString();
} catch (CharacterCodingException e) {
}
19
ответ дан VonC 30 January 2019 в 15:30
поделиться
  • 1
    Спасибо, хорошее знать о dir запуска. Я недавно нашел о exec_files в опциях файла конфигурации. Кажется, что файлы dir запуска выполняются прежде exec_files записи. Ссылка информативна. – nom-mon-ir 12 December 2012 в 05:20

Это намного проще, если вы подумаете о юникоде как о наборе символов (что на самом деле и есть - это, по сути, нумерованный набор всех известных символов). Вы можете закодировать его как UTF-8 (1-3 байта на символ в зависимости от) или, возможно, UTF-16 (2 байта на символ или 4 байта с использованием суррогатных пар).

Назад в туманные времена Java использовала UCS- 2 для кодирования набора символов Юникода. Это могло обрабатывать только 2 байта на символ и теперь устарело. Добавление суррогатных пар и переход на UTF-16 было довольно очевидным приемом.

Многие люди думают, что им в первую очередь следовало использовать UTF-8. Когда изначально была написана Java, в юникоде все равно было гораздо больше 65535 символов ...

0
ответ дан 27 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

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