Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java nio charset

Установка кодировки символов Java по умолчанию?

Как правильно установить кодировку символов по умолчанию, используемую JVM (1.5.х) программно?

Я читал, что -Dfile.encoding=whatever раньше был способ пойти для старых JVMs. У меня нет такой роскоши по причинам, в которые я не хочу вдаваться.

и свойство устанавливается, но это, похоже, не вызывает окончательный вызов getBytes ниже, чтобы использовать UTF8:

15 ответов

к сожалению, file.encoding свойство должно быть указано при запуске JVM; к моменту ввода основного метода кодировка символов, используемая String.getBytes() и конструкторы по умолчанию InputStreamReader и OutputStreamWriter постоянно кэшируется.

As Эдвард грех указывает, в частном случае, как это, переменная окружения JAVA_TOOL_OPTIONS can используется для указания этого свойства, но обычно это делается так это:

Charset.defaultCharset() будет отражать изменения file.encoding свойство, но большинство кода в основных библиотеках Java, которые должны определить кодировку символов по умолчанию, не используют этот механизм.

когда вы кодируете или декодируете, вы можете запросить file.encoding собственность или Charset.defaultCharset() чтобы найти текущую кодировку по умолчанию и использовать соответствующий метод или перегрузку конструктора, чтобы указать ее.

поскольку командная строка не всегда может быть доступна или изменена, например, во встроенных VMs или просто VMs, запущенных глубоко в сценариях, a JAVA_TOOL_OPTIONS переменная предоставляется так, что агенты могут быть запущены в этих случаях.

установив переменную среды (Windows) JAVA_TOOL_OPTIONS до -Dfile.encoding=UTF8 , (Java) System свойство будет устанавливаться автоматически при каждом запуске JVM. Вы будет знать, что параметр был выбран, потому что следующее сообщение будет опубликовано на System.err :

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

У меня есть хакерский способ, который определенно работает!!

таким образом, вы собираетесь обмануть JVM, который будет думать, что charset не установлен и сделать это, чтобы установить его снова в UTF-8, во время выполнения!

Я думаю, что лучший подход, чем установка набора символов платформы по умолчанию, тем более, что у вас, похоже, есть ограничения на влияние на развертывание приложения, не говоря уже о платформе, — это вызвать гораздо более безопасный String.getBytes(«charsetName») . Таким образом, ваше приложение не зависит от вещей, находящихся вне его контроля.

Я лично считаю, что String.getBytes() должно быть устаревшим, так как это вызвало серьезные проблемы в ряде случаев, которые я видел, когда разработчик не учитывал значение по умолчанию кодировка, возможно, меняется.

Я не могу ответить на ваш первоначальный вопрос, но я хотел бы предложить вам несколько советов-не зависите от кодировки JVM по умолчанию. Всегда лучше явно указать желаемую кодировку (например,» UTF-8″) в вашем коде. Таким образом, вы знаете, что он будет работать даже в разных системах и конфигурациях JVM.

Все включено кодировка, чтобы избежать «java.nio.charset.MalformedInputException: Input length = 1»?

Я-создание простого приложения WordCount программы в Java, который прочитывает текст на основе каталога файлов.

Тем не менее, я продолжаю получать ошибку:

из этой строки кода:

Я знаю, что, вероятно, получу это, потому что я использовал Charset , который не включал некоторые символы в текстовых файлах, некоторые из которых включали символы других языков. Но я хочу включить и этих персонажей.

Позже я узнал в JavaDocs , что Charset является необязательным и используется только для более эффективного чтения файлов, поэтому я изменил код на:

Но некоторые файлы все равно выбрасывают MalformedInputException . Я не знаю почему.

Мне было интересно, есть ли всеохватывающий Charset , который позволит мне читать текстовые файлы с множеством различных типов символов ?

9 Ответов

Вероятно, вы хотите иметь список поддерживаемых кодировок. Для каждого файла попробуйте каждую кодировку по очереди, возможно, начиная с UTF-8. Каждый раз, когда вы ловите MalformedInputException , попробуйте следующую кодировку.

Создание BufferedReader из Files.newBufferedReader

при запуске приложения может возникнуть следующее исключение:

Разница заключается в том, что первый использует действие по умолчанию CharsetDecoder.

Действие по умолчанию для ошибок с неправильным вводом и неприменимыми символами состоит в том, чтобы сообщить о них.

в то время как последний использует действие REPLACE.

ISO-8859-1-это всеохватывающая кодировка, в том смысле, что она гарантированно не бросит MalformedInputException. Так что это хорошо для отладки, даже если ваш ввод не находится в этой кодировке. Так:-

У меня было несколько символов double-right-quote/double-left-quote в моем вводе, и мы оба-ASCII и UTF-8 бросили на них MalformedInputException, но ISO-8859-1 сработало.

Я также столкнулся с этим исключением с сообщением об ошибке,

и обнаружил, что какая-то странная ошибка возникает при попытке использования

чтобы записать строку «orazg 54», приведенную из универсального типа в классе.

Эта строка длиной 9 содержит символы со следующими кодовыми точками:

Сто одиннадцать Сто четырнадцать Девяносто семь Сто двадцать два Сто три Девять 53 52 10

Однако, если BufferedWriter в классе заменяется на:

он может успешно написать эту строку без исключений. Кроме того, если я напишу ту же строку create из символов, она все равно будет работать OK.

Ранее я никогда не сталкивался с каким-либо исключением при использовании первого BufferedWriter для записи любых строк. Это странная ошибка, которая возникает в BufferedWriter, созданном из java.nio.file.Files.newBufferedWriter(path, параметры)

ISO_8859_1 работал на меня! Я читал текстовый файл с разделенными запятыми значениями

Я написал следующее, чтобы распечатать список результатов для standard out на основе доступных наборов символов. Обратите внимание, что он также сообщает вам, какая строка не работает с номером строки на основе 0, если вы устраняете неполадки, которые вызывают проблемы с символом.

Ну, проблема в том, что Files.newBufferedReader(Path path) реализован вот так :

поэтому в принципе нет смысла указывать UTF-8 , если вы не хотите быть описательным в своем коде. Если вы хотите попробовать кодировку «broader», вы можете попробовать с StandardCharsets.UTF_16 , но вы не можете быть уверены, что 100% получит все возможные символы в любом случае.

попробовать это.. у меня была та же проблема, ниже реализация работала на меня

затем используйте ридера, где когда-либо вы хотите.

вы можете попробовать что-то вроде этого, или просто скопировать и пропустить ниже кусок.

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

У меня есть 2 парных поля input, и мне нужно переключаться между ними (если одно включено, то другое должно быть отключено). Я понятия не имею, как к этому подойти, есть идеи?

Я получаю очень редкий, но повторяемый, MalformedInputException в моем коде ScalaCheck. Я не смог точно определить его или получить твердое воспроизведение, кроме occasionally,, но вот код, который.

У меня есть эта (лишенная тегов HTML для примера кода) функция, которая строит таблицу HTML из CSV, но я получаю ошибку времени выполнения каждый раз, когда пытаюсь запустить ее, и я не знаю.

Я пытаюсь использовать потоки для чтения файла, но я не могу пройти мимо исключения. Я оглядываюсь вокруг, но никак не могу понять, почему его бросают. Файл, который я собираюсь прочитать, — это.

Я пытаюсь читать В а.торрент-файл со следующим кодом: val source = scala.io.Source.fromFile(filename, utf-8) val lines = source.mkString source.close() Но когда я запускаю свою программу, я получаю.

Код, который читает слово из файла, создает файл с этим именем и записывает содержимое, это связано с изменениями sw, потому что он работал нормально до недавнего времени. Изменен код, а также.

Читать еще:  Как исправить ошибку boot

Java nio charset

Java NIO Tutorial

Java new input output library allows you to perform input and output operations efficiently. Unlike Java I/O classes which read and write data byte by byte using stream objects, Java NIO reads and writes data in blocks using channels which use operating system features.

NIO allows you to create high speed input and output programs as it doesn’t deals with keeping and removing data to and from buffers. NIO uses operating system features to do that. That is why you will get performance improvement in performing input and output operations using NIO API.

Table of Contents

Difference between IO and NIO

The I/O classes found in java.io.* package reads and writes data one byte at a time. Whereas, NIO classes found in java.nio.* package reads and writes data in blocks.

Input and output operations are slow using IO. Using NIO API, input and output operations are performed fast because it relies on operating system features and deals with data in blocks.

The advantage of using IO is that it allows you to use filters and chain of filters on data stream.

With IO, you directly read from and write to stream objects. Using NIO, you read from buffer objects and write to buffer objects. Buffer object in turn uses channel to read data from sources and to write data to destinations. NIO uses system level buffers.

Stream objects are unidirectional meaning you can create a stream for reading or writing. Channels are bidirectional meaning a channel can be used for both reading and writing data.

Using NIO API, data can be read and written asynchronously. You can use NIO API in such as a way that while performing IO operations current thread is not blocked.

NIO API offer selectors which allow you to listen to multiple channels for IO events in asynchronous or non blocking way.

Buffers

Buffers are non-resizable data container objects. You write data to buffers and channels read the data from it and transfer it to destinations. Channels get data from the source, write it to buffers and your program reads data from buffers. NIO API provides buffers which can contain different types of primitive data, such as CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, ShrotBuffer, etc. ByteBuffer can contain data in bytes. You communicate with Channels using ByteBuffer.

Attributes of Buffers are capacity (maximum number of elements buffer can contain), limit (it tells the end of active buffer content), position (index of the next element to be read and written) and mark (remembers the position when mark() is called, when reset() is called its position will be set to mark.)

To create a buffer, you need to first call allocate() method passing capacity which indicates the number of elements the array inside the buffer can hold.

Method allocate() creates non-direct buffer. If you want to create direct buffers, you need to use allocateDirect() method. With direct buffers, IO operations are performed directly on it without using intermediates. But direct buffers are expensive to allocate and de-allocate. Direct buffers improve performance when they are used for handling large amount of data that is operated upon by system native IO operations.

You can also create Buffer object by calling wrap() method and passing appropriate array to it as an argument.

ByteBuffer offers methods such as asIntBuffer(), asFloatBuffer(), asLongBuffer(), asDoubleBuffer(), etc, to convert it into different types of buffer objects.

To fill buffers, you can use put methods of the buffer object. In the below example, after CharBufer allocated, the capacity and limit are set 50 and position is set to 0. After filling the buffer with the deals string, capacity and limit stays same and position is set to 5. As you keep adding characters to the buffer, position value increases.

To access values or to drain buffers, you can use absolute or relative get methods. To use absolute get method, you need to pass index of the element you want to access. Relative get method returns the value relative to the current position.

To access different types of values, ByteBuffer offers methods such as getDouble, getChar, getInt, getDouble, etc.

To access bulk values, you can use relative and absolute get() methods passing array to it.

Buffer object provides relative and absolute put() methods to add values to buffer. It also provides bulk relative put() methods to add array of values to it.

If you call get() immediately after put, you will not get first character. In the below example, after put, position is set to 5. A call to get() on the buffer give empty char value.

To make the get() return first element, you need to set the position to 0. Subsequent get() calls return next char value that means get() call increases position. If you call get() after position reaches to limit, it will throw BufferUnderflowException.

In order to prevent getting empty values or to get only active values from the buffer, you can set limit to total active element in the buffer. Going back to our example, char buffer contains only 5 elements. So we can set limit to 5. To prevent BufferUnderflowException, you can hasRemaining() to check if next active value is available.

Instead of calling limit and position methods, you can use flip() method to exactly do the same. It is important to note that flip() call should not be called twice. Second call to flip() sets the limit to 0.

Buffer provides rewind() method, it just sets the position of buffer to 0 without resetting the limit property of the buffer. You can reuse buffer after it is filled and drained using clear() method. Clear method doesn’t remove elements from buffer, but it sets the current position to 0 and the limit property is assigned the value of capacity of the buffer.

Buffer provides slice() method using which you can create a new Buffer object that contains values from current position of source buffer. The elements are shared between source and the new buffer, meaning changes to common element in buffers will be visible in the other buffer object. Slicing buffers allows you to get part of a buffer and perform modifications on it without using complete content.

You can convert a buffer to read only buffer using asReadOnlyBuffer() method.

Character Set

Java new input output API provides in java.nio.charset package charset, character encoders and decoders which can be used to translate between bytes and Unicode characters.

CharSet is a name mapping between 16 bit Unicode characters and bytes.

Читать еще:  Java класс url

Decoder transfers bytes in a specific character set into characters. Encode transfers characters into bytes in a specific character set. Standard character sets are US-ASCII (Seven-bit ASCII), ISO-8859-1 (ISO Latin alphabet No. 1), UTF-8 (8 bit character set unicode standard), UTF-16BE, UTF-16LE and UTF-16 (16 bit character set unicode standard) .

To get a Charset object, you need to call forName() static method of Charset class passing character set name.

You can get character set name and display name by calling name() and displayName() methods respectively on charset object. To encode a string using a specific char set, first create charset object using forName method and then call encode() method passing the string to be encoded. Method encode returns ByteBuffer object.

To decode bytes into characters, first create ByeBuffer containing the bytes, call decode() method on char set object passing ByteBuffer. Method decode() returns CharBuffer object.

Channels

Channel objects efficiently perform read and write operations on the destinations such as file, device, network socket and program components. To read data, you create a buffer and pass it to the read method of the channel object. To write data, you create a buffer object and pass it to write method of the channel object.

Channels can be used in blocking and non-blocking mode. In blocking mode operations return after completion only.

Some of the implementation classes of Channel interface are AsynchronousFileChannel, AsynchronousServerSocketChannel, AsynchronousSocketChannel, DatagramChannel, FileChannel, SelectableChannel, ServerSocketChannel and SocketChannel.

FileInputStream.getChannel(), FileOutputStream.getChannel(), and RandomAccessFile.getChannel() methods return FileChannel.

File Reading and Writing using Buffer and Channel Objects

Let’s see how to read from a channel and to write to the channel. For this example, we will use FileChannel.

First let’s see how to read data from a file. For that, we need to create Buffer object, then get FileChannel object from InputStreamReader and call read() method on FileChannel object passing ByteBuffer object.

To write data to a file, get the FileChannel object from OutputStreamWriter and call write method on FileChannel object passing ByteBuffer object.

Non Blocking IO Using Selector and Selectable Channels

You can create IO components which are multiplexed and non blocking using selector, selectable channel and selection key. Selector class is a multiplexer which allows multiple selectable channels to be added to it allowing multiple channels to be used on a single thread. Selector allows you to select channels which are ready for IO operations.

The channels that can be added to Selector are special channels created for using with Selector. The selectable channels can be operated in blocking mode (every IO operation blocks until it is completed) and non blocking mode (non-blocking channel doesn’t block the thread). To use a selectable channel with the selector, you need to put the selectable channel in non blocking mode.

When a selectable channel is added to selector, a token called selection key representing the registration of a channel with selector is created. Selector adds the newly created key to a set. When a channel becomes ready for IO operation, selector adds the key to a set which contains only keys of channels which are ready for IO. You can access this set, by invoking selectedKeys() method on the selector object.

Here are the steps to be performed in creating multiplexed non blocking IO components.

  • First create a selectable channel. Selectable channel classes are DatagramChannel for data gram sockets, Pipe.SinkChannel represents readable end of pipe, Pipe.SourceChannel represents writable end of pipe, ServerSocketChannel for stream oriented listening sockets, SocketChannel for stream oriented connecting sockets.
  • Put the selectable channel in non blocking mode.
  • Create selector object by calling static method open() on Selector class. It creates selector object using default selector provider.
  • Then register the selectable channel with selector by calling register() method on the channel object passing selector object and operation interest such as SelectionKey.OP_ACCEPT, SelectionKey.OP_CONNECT, SelectionKey.OP_READ or SelectionKey.OP_WRITE. The register() method returns selection key.
  • Then repeatedly invoke select() method on the selector object to check if any channels are ready for IO operations. This method returns number of channels ready for IO operations.
  • If select method in the above step returns greater than zero, get selected keys by calling selectedKeys() method on the selector object.
  • Iterate over the selected keys and check to see if a key represents an interested operation. If a key represents an interested operation, then get the selectable channel associated with the key and perform the operation on the channel.
  • Remove the key from selected set by calling remove on iterator.

Non Blocking IO Server Example

Let’s see how to use selector, selectable channel and selection key by creating non blocking IO component. In this example, we will use ServerSocketChannel and SocketChannel to create multiplexing server which accepts client connections, processes request and sends response to client.

The example first creates ServerSocketChannel, registers with selector for accept operation and repeatedly checks for channel readiness. When there is a client request, it gets the SocketChannel from ServerSocketChannel and registers it with selector for read operations. It checks for readiness of SocketChannel for read operation, reads input from client and sends response.

You can run the program, it will start server and listens for requests on 8080 port. If you send deals string from client, it will respond with offer. Below is the output.

Non Blocking IO Client Example

Below is the non blocking multiplexing client example. The example first creates SocketChannel, then connects to server, sends request to it and registers the channel with selector for read operations. Once the channel is ready for read operations, the response from server is captured.

If you run this example, you will get response from the server started using above server example.

How to get and set default Character encoding or Charset in Java

D efault Character encoding in Java or charset is the character encoding used by JVM to convert bytes into String s or characters when you don’t define java system property » file.encoding «. Java gets character encoding by calling System.getProperty(«file.encoding»,»UTF-8″) at the time of JVM start-up. So if Java doesn’t get any file.en c o d ing attribute it uses «UTF-8» character encoding for all practical purpose e.g. on String.getBytes() or Charset.defaultCharSet() . Most important point to remember is that Java caches character encoding or value of system property «file.encoding» in most of its core classes like InputStreamReader which needs character encoding after JVM started. so if you change system property «file.encoding» programmatically you don’t see desired effect and that’s why you should always work with your own character encoding provided to your application and if its need to be set than set character encoding or charset while you start JVM . In this Java tutorial , we will see couple of different way by which we can set default character encoding or charset of Java and how to retrieve value of charset inside java program.

Читать еще:  Java xmlgregoriancalendar to date

Default Character encoding or Charset in Java

This article is in continuation of my post on Java String like Why String is immutable in Java or How SubString method works in java . If you haven’t read those you may find interesting.

What is character encoding in Java

How to get Default character encoding in Java ?

How to set Default character encoding in Java ?

/java java HelloWorld

Code Example to Get and Set Default Character Encoding Java

9 comments :

Character Encoding so far looked little difficult to me but after reading this article I at least got to know that what is character encoding in Java and where does it get used and what issues it can cause if bytes encoded in one character set decoded on another charset. Thanks a lot

January 27, 2012 at 12:05 AM Anonymous said.

Note that explicitly trying to set the «file.encoding» system property on the command line or via environment variables is not supported; this value is not respected by all the JVM’s APIs. See the evaluation comments on bugs.sun.com Bug ID: 4163515 for details. http://bugs.sun.com/view_bug.do?bug_id=4163515

@Anonymous thanks for pointing it out. So do you see any alternative except providing character encoding explicitly on constructors ?

February 3, 2012 at 10:43 PM Anonymous said.

I need to write to files with their filenames may include the euro (€) character. I can do it in my own pc with ubuntu 10.04 and java 1.6.0.26 where by default java uses UTF-8. But when I execute the code in the server (where java defaults to ASCII) the filename have a ? character.
I use /usr/local/jdk1.6.0_10/bin/java -classpath . -Dfile.encoding=UTF-8 TestEuro.

Can you help me with this? Thank you very much .

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class TestEuro <
public static void main( String[] args ) throws Exception <

System.out.println(«file.encoding: » + System.getProperty(«file.encoding»));
String path = «/srv/fws/java/indexer/» ;
String s1 = «test_€_encoding.txt» ;
File f = new File(path + s1);
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(f));
osw.write( «test filen» ) ;
osw.write( «€» + «n») ;
osw.write( «test file» ) ;
osw.flush();
osw.close();
System.out.println(«s1: » + s1);
>
>

March 1, 2012 at 1:27 AM Anonymous said.

I understand character encoding in Java hard way. We had Java program which reads xml file and also calls String.getBytes() to convert XML String to byte array, now this call is subject to character encoding. By default it uses system’s character encoding or value returned by System.getProperty(«file.encoding»), due to this for one input our program works fine in one of environment but failed in other environment. It took a lot of time to find out where is the issue. ultimately fix was to run your Java program with specified character encoding e.g. -Dfile.encoding=UTF-16, this will make sure that your application will always use correct character encoding and not behave differently on different machine.

I’ve got a number of files in an unknown encoding format. Does anyone here know of a tool that would display the results of multiple encoding assumptions converted to one common output format (such as UTF-8)? The tool would take an input string, then return an array (or display) multiple result strings, each with a different base assumption about the initial encoding? For example: convert string foo= «ç›£è¦–対象ã�®åœ°åŸŸã‚¯ãƒ©ã‚¹ã�®ä¸€è¦§» into UTF-8, assuming that foo is each of (UTF-8, EUC-JP, Shift-JIS, etc.).

October 11, 2013 at 10:59 AM Anonymous said.

Messing with character encoding is very difficult bug to solve. first of all if you don’t explicitly specifly character encoding to methods like String.getBytes() or new String(byte[]) , it wlll use platform’s default encoding, which could be diffeerent in differnet server and operating system. Default encoding may not be even sufficient to display all the characters your appliation is expecting e.g. your default encoding might be able to handle european characters but not the east asian characters.

PS: Default Character Encoding can be overwritten in your process as below.
InputStreamReader reader = new InputStreamReader(is, «UTF-8»);

Установка кодировки символов Java по умолчанию?

309 [2008-12-12 08:31:00]

Как правильно настроить кодировку по умолчанию, используемую программным обеспечением JVM (1.5.x)?

Я читал, что -Dfile.encoding=whatever был тем, как идти на старшие JVM. У меня нет такой роскоши по причинам, по которым я не попаду.

И свойство получает значение, но, по-видимому, он не вызывает окончательный вызов getBytes ниже для использования UTF8:

java utf-8 character-encoding

15 ответов

259 Решение erickson [2008-12-12 08:56:00]

К сожалению, свойство file.encoding должно указываться при запуске JVM; к моменту ввода вашего основного метода кодировка символов, используемая String.getBytes() и конструкторы по умолчанию InputStreamReader и OutputStreamWriter , была постоянно кэширована.

Как Эдуард Греч указывает, в специальном случае, подобном этому, переменную окружения JAVA_TOOL_OPTIONS можно использовать для указания этого свойства, но обычно это делается так

Charset.defaultCharset() будет отражать изменения в свойстве file.encoding , но большая часть кода в основных библиотеках Java, которые должны определять кодировку по умолчанию, не использует этот механизм.

Когда вы кодируете или декодируете, вы можете запросить свойство file.encoding или Charset.defaultCharset() , чтобы найти текущую кодировку по умолчанию, и использовать соответствующий метод или перегрузку конструктора, чтобы указать его.

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

Установив переменную среды (Windows) JAVA_TOOL_OPTIONS на -Dfile.encoding=UTF8 , свойство (Java) System будет установлено автоматически при каждом запуске JVM. Вы узнаете, что параметр был поднят, потому что следующее сообщение будет отправлено на System.err :

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

55 naskoos [2013-02-20 22:09:00]

У меня есть хакерский способ, который определенно работает!

Таким образом вы собираетесь обмануть JVM, который думал бы, что набор символов не установлен и заставит его снова установить его на UTF-8 во время выполнения!

Я думаю, что лучший подход, чем установка набора символов по умолчанию для платформы, особенно, поскольку у вас, похоже, есть ограничения на влияние на развертывание приложения, не говоря уже о платформе, можно назвать гораздо безопаснее String.getBytes(«charsetName») . Таким образом, ваше приложение не зависит от того, что находится вне его контроля.

Я лично считаю, что String.getBytes() должен быть устаревшим, поскольку он вызвал серьезные проблемы в ряде случаев, которые я видел, когда разработчик не учитывал кодировку по умолчанию, возможно, меняющуюся.

Я не могу ответить на ваш первоначальный вопрос, но я хотел бы предложить вам несколько советов — не зависит от кодировки JVM по умолчанию. Всегда лучше явно указать желаемое кодирование (т.е. «UTF-8» ) в вашем коде. Таким образом, вы знаете, что он будет работать даже в разных системах и конфигурациях JVM.

Ссылка на основную публикацию
Adblock
detector