<?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'];
}
?>
Это связано с кодировкой символов . Компьютеры занимаются только цифрами. Чтобы сохранить текст, символы в тексте должны быть преобразованы в номера и из них, используя некоторую схему. Эта схема называется кодировкой символов. Существует множество различных кодировок символов; некоторые из известных стандартных кодировок символов - 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);
Чтобы дополнить ответ Джеспера , то, что происходит здесь (и недокументировано!), состоит в том, что Files.lines()
создает CharsetDecoder
, чья политика заключается в отказе от неверных последовательностей байтов; то есть его CodingErrorAction
установлен в REPORT
.
Это отличается от того, что происходит почти для всех других реализаций Reader
, предоставляемых JDK, стандартная политика которых к REPLACE
. Эта политика приведет к тому, что все неизменяемые последовательности байтов испускают символ замены (U + FFFD) .
2017 использование:
Charset.forName("ISO_8859_1") instead of Charsets.ISO_8859_1
Files.lines
по умолчанию использует кодировку UTF-8 , тогда как создание новой строки из байтов будет использовать системную кодировку по умолчанию. Похоже, что ваш файл не находится в UTF-8, поэтому он не работает.
Проверьте, какая кодировка используется вашим файлом, и передайте его как второй параметр.