Поток Java для каждого [дубликата]

<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>
11
задан Wivani 23 October 2015 в 14:10
поделиться

4 ответа

Это связано с кодировкой символов . Компьютеры занимаются только цифрами. Чтобы сохранить текст, символы в тексте должны быть преобразованы в номера и из них, используя некоторую схему. Эта схема называется кодировкой символов. Существует множество различных кодировок символов; некоторые из известных стандартных кодировок символов - ASCII, ISO-8859-1 и UTF-8.

В первом примере вы читаете все байты (числа) в файле, а затем преобразуете их в символов, передав их конструктору класса String. Это будет использовать кодировку по умолчанию вашей системы (независимо от ее операционной системы) для преобразования байтов в символы.

Во втором примере, где вы используете Files.lines(...), символ UTF-8 кодирование будет использоваться, согласно документации . Когда в файле, который не является допустимой последовательностью UTF-8, будет найдена последовательность байтов, вы получите MalformedInputException.

Кодировка символов по умолчанию вашей системы может быть или не быть UTF- 8, так что это может объяснить разницу в поведении.

Вам нужно будет выяснить, какая кодировка символов используется для файла, а затем явно использовать это. Например:

String content = new String(Files.readAllBytes(Paths.get("_template.txt")),
        StandardCharsets.ISO_8859_1);

Второй пример:

Stream<String> lines = Files.lines(Paths.get("_template.txt"),
        StandardCharsets.ISO_8859_1);
21
ответ дан Jesper 1 September 2018 в 06:33
поделиться

Чтобы дополнить ответ Джеспера , то, что происходит здесь (и недокументировано!), состоит в том, что Files.lines() создает CharsetDecoder , чья политика заключается в отказе от неверных последовательностей байтов; то есть его CodingErrorAction установлен в REPORT.

Это отличается от того, что происходит почти для всех других реализаций Reader, предоставляемых JDK, стандартная политика которых к REPLACE. Эта политика приведет к тому, что все неизменяемые последовательности байтов испускают символ замены (U + FFFD) .

6
ответ дан Community 1 September 2018 в 06:33
поделиться

2017 использование:

 Charset.forName("ISO_8859_1") instead of Charsets.ISO_8859_1
1
ответ дан delive 1 September 2018 в 06:33
поделиться

Files.lines по умолчанию использует кодировку UTF-8 , тогда как создание новой строки из байтов будет использовать системную кодировку по умолчанию. Похоже, что ваш файл не находится в UTF-8, поэтому он не работает.

Проверьте, какая кодировка используется вашим файлом, и передайте его как второй параметр.

1
ответ дан Evan Knowles 1 September 2018 в 06:33
поделиться
Другие вопросы по тегам:

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