2016-08-09 2 views
1

Я использую forbiddenapis для проверки кода. Это дает ошибку:Настройка кодировки для строки

[forbiddenapis] Forbidden class/interface use: java.lang.String#<init>(byte[]) 
[forbiddenapis] in org.a.b.MyObject (MyObject.java:14) 

который указывает на:

String finalString = new String(((ByteArrayOutputStream) out).toByteArray()); 

Как я могу решить это? Я знаю, что я могу установить Charset, т.е .:

Charset.forName("UTF-8").encode(myString); 

Однако поскольку используются байты, который набор символов я должен использовать, чтобы избежать проблем с разными персонажами?

+0

'новой строки (ByteArray,, кодирокой)'. –

+1

Кодировка, которую вы используете, должна быть кодировкой, в которой закодированы байты - знаете ли вы, что впереди? –

+0

Если вы используете UTF-8, рассмотрите «StandardCharsets.UTF_8'. – shmosel

ответ

0

Не используйте FileReader. Это старый класс утилиты для чтения файлов в кодировке платформы по умолчанию. Это не подходит для переносных файлов. Код не переносится.

String/Reader/Writer содержит Юникод. При преобразовании из byte[]/InputStream/OutputStream необходимо указать кодировку этих байтов, двоичных данных.

String s = new String(bytes, charset); 
byte[] bytes = s.getBytes(charset); 

кажется, что сообщение упоминает FileReader и жалуется на его

new String(bytes); 

, который использует кодировку по умолчанию, равно как:

string.getBytes(); 
1

Вам понадобится прояснить кодировку, с которой были закодированы байты в первую очередь. Если вы уверены, что бы всегда быть UTF8, вы могли бы просто использовать String конструктор:

new String(bytes, StandardCharsets.UTF_8) 
Смежные вопросы