Как сохранить строку с кодовой страницей 1250 в RandomAccessFile в Java - PullRequest
2 голосов
/ 31 мая 2011

У меня есть текстовый файл со строкой, кодовая страница которой 1250. Я хочу сохранить текст в RandomAccessFile.Когда я читаю байты из RandomAccessFile, я получаю строку с другим символом.Некоторое решение ...

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Если вы используете writeUTF(), вы должны прочитать его JavaDoc, чтобы узнать, что он всегда записывает измененный UTF-8 .

Если вы хотитеиспользуйте другую кодировку, тогда вам придется «вручную» выполнить кодировку и каким-то образом сохранить длину byte[].

Например:

RandomAccessFile raf = ...;
String writeThis = ...;
byte[] cp1250Data = writeThis.getBytes("cp1250");
raf.writeInt(cp1250Data.length);
raf.write(cp1250Data);

Чтение будет работатьаналогично:

RandomAccessFile raf = ...;
int length = raf.readInt();
byte[] cp1250Data = new byte[length];
raf.readFully(cp1250Data);
String string = new String(cp1250Data, "cp1250");
0 голосов
/ 31 мая 2011

Этот код будет писать и читать строку, используя кодовую страницу 1250. Конечно, вам нужно будет очистить его, проверить исключения и правильно закрыть потоки, прежде чем добавлять в prod:)

    public static void main(String[] args) throws Exception {
    File file = new File("/toto.txt");
    String myString="This is a test";
    OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(file), Charset.forName("windows-1250"));
    w.write(myString);
    w.flush();
    CharBuffer b = CharBuffer.allocate((int)file.length());
    new InputStreamReader(new FileInputStream(file), Charset.forName("windows-1250")).read(b);
    System.out.println(b.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...