在现代的Unix或Linux系统上,如何判断/etc/passwd文件存储用户名的代码集?是否允许用户名包含重音字符(例如,ISO 8859-1或8859-15中的0x80..0xFF范围)?该/etc/passwd文件可以包含UTF-8吗?你能说它包含UTF-8吗?密码在加密或散列之前的纯文本怎么样?
显然,如果用户名和其他数据限制在0x00..0x7F范围内(并且无论如何都不包括0x00),则UTF-8,8859-1或8859-15之间没有区别; 存在的字符都编码相同.
另外,我在/etc/passwd基于Unix的机器上使用"用户识别和认证数据库(有时称为目录服务)"的缩写,通常通过PAM访问,有时在本地托管在其他机器上一个,但有时还是实际的本地硬盘上的文件,通常被称为/etc/passwd,通常由支持/etc/shadow".我还假设关于组数据库(通常是/etc/group文件)的等效问题具有相同的答案.
我正在使用PHP开发一个网站,这些奇怪的字符""出现在我的页面中,就在它的顶部.我的代码是这样的:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><?php echo '';?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Run Code Online (Sandbox Code Playgroud)
但是当我在浏览器中看到源代码时,它会显示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Run Code Online (Sandbox Code Playgroud)
我不知道是否与我正在使用的编码有任何关系,因为当我将charset更改为charset=utf-8它消失但我必须使用iso-8859-1
我在两个应用程序之间共享一个sql-server 2010数据库.我们控制的一个应用程序,另一个应用程序是首先创建数据库的第三方应用程序.我们的应用程序是基于第三方Webmail应用程序构建的CRM.
该数据库包含varchar列,并且是latin-1编码的.第三方应用程序是用PHP编写的,并不关心正确编码数据,所以它将utf-8编码的字节填充到varchar列中,在那里它们被解释为latin-1并且看起来像垃圾.
我们的CRM应用程序是用.Net编写的,它自动检测数据库排序规则与内存中字符串的编码不同,因此当.Net写入数据库时,它会转换字节以匹配数据库编码.
所以...从我们的应用程序写入数据库的数据在数据库中看起来是正确的,但来自第三方应用程序的数据却没有.
当我们的应用程序写入FirstName =Céline时,它将作为Céline存储在数据库中
当webmail应用程序写入FirstName =Céline时,它将作为Céline存储在db中
我们的CRM应用程序需要显示在任一系统中创建的联系人.所以我正在编写一个EncodingSniffer类,它查找标记的字符,指示其编码不良的字符串并转换它们.
目前我有:
private static string[] _flaggedChars = new string[] {
"é"
};
这对于显示Céline作为Céline很有用,但我需要添加到列表中.
有没有人知道一个资源,以获得utf-8特殊字符可以解释为iso-8859-1的所有可能方式?
谢谢
澄清: 因为我在.Net工作.当从数据库加载到内存中时,该字符串将转换为Unicode UTF-16.因此,无论它是否在数据库中正确编码.它现在表示为UTF16字节.我需要能够分析UTF-16字节,并确定它们是否因为utf-8字节被塞入iso-8859-1数据库而被搞砸了....清楚如泥吧?
这是我到目前为止所拥有的.它清理了大多数错误编码字符的显示,但我仍然遇到É问题:Éric通过webmail存储在数据库中,但是在检测到错误编码并将其更改回来后,它显示为 ? ric看着有2500个联系人的用户,其中有数百个有编码问题,É是唯一没有正确显示的东西......
public static Regex CreateRegex()
{
string specials = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö";
List<string> flags = new List<string>();
foreach (char c in specials)
{
string interpretedAsLatin1 = Encoding.GetEncoding("iso-8859-1").GetString(Encoding.UTF8.GetBytes(c.ToString())).Trim();//take the specials, treat them as utf-8, interpret them as latin-1
if (interpretedAsLatin1.Length > 0)//utf-8 chars made up of 2 bytes, interpreted as two single byte latin-1 …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android应用程序,我需要对使用ZXing应用程序生成的QRCode中的字节数组进行编码和解码.我的问题是我的消息解码与生成的字节数组不完全匹配.我尝试基于包含递增索引的字节数组创建QRCode,即
input = [0, 1, 2, ..., 124, 125, 126, 127, -128, -127,... -3, -2, -1, 0, 1, 2, ...]
Run Code Online (Sandbox Code Playgroud)
在对QRCode中的消息进行编码并在响应方侧对其进行解码后,我获得了以下字节数组输出:
output = [0, 1, 2, ..., 124, 125, 126, 127, 63, 63,... 63, 63, 63, 0, 1, 2, ...]
Run Code Online (Sandbox Code Playgroud)
所有"负"字节值都转为ASCII字符63:'?' 问号字符.我假设编码字符集出了问题,但由于我使用的是ISO-8859-1,每个人都声称是这类问题的解决方案(其他主题处理相同类型的问题或在这里),我不知道看看我的错误在哪里,或者我是否在编码或解码过程中跳过了一步.这是我执行以编码给定字节数组的代码:
String text = "";
byte[] res = new byte[272];
for (int i = 0; i < res.length; i++) {
res[i] = (byte) (i%256);
}
try {
text = new String(res, "ISO8859_1");
} catch (UnsupportedEncodingException …Run Code Online (Sandbox Code Playgroud) 我需要评估和比较QR码生成库,并寻找逻辑参数来测量和比较输出.
我为什么需要这个?似乎当我给两个不同的QR发生器输入相同的输入时,似乎会产生不同的输出,而我作为人类无法分辨哪一个是正确的.
通过正确我的意思是我的输入编码/表示了多少"QR"数据,或者能够被便宜的手机(更大的块)读取.
处理二进制数据尤其如此,其中每个字节在0x7f(十进制127)或A0(十进制160)之间,偶尔处理0到0x20(十进制32)之间的值
上面提到的问题区域也恰好与ISO IEC 8859 1字符集的无效或不可打印字符相关联,因此库可能将我的输入作为一个字符串读取,或者将其编码为2字节UTF- 16个字,或谁知道!
如果有人知道我应该查看的QR码的哪些方面,或者更好的是,显示QR码诊断数据的应用程序将是完美的.
我在SQL Server中有一个使用utf8 SQL_Latin1_General_CP1_CI_AS编码的列.如何转换和保存ISO 8859-1编码的文本?我想在SQL Server的查询中做一些事情.有小费吗?
Olá.Gostei做jogo.Quando"baixei"até©achei quenão iria curtir muito
我查了iso_8859-1的手册,找到了度数符号:
\n\nOct Dec Hex Char Description\n260 176 B0 \xc2\xb0 DEGREE SIGN\nRun Code Online (Sandbox Code Playgroud)\n\n代码:
\n\nint main( int argc, char *argv[])\n{\n char chr = 176; //stores the extended ASCII of a symbol\n printf("Character with an ascii code of 251: %c \\n", chr);\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但它打印出来的是?.
如何在 C 程序中输出学位符号?我需要包含一些文件吗?
\n我有一个输出JSON的servlet.servlet的输出编码是ISO-8859-1.我们的webapp中的页面也设置为ISO-8859-1.我会使用UTF-8,但这不在我的控制之内; 我们必须使用ISO-8859-1.
当我单独点击servlet时,我可以看到已经输出的JSON数据.字符编码是正确的,没有一个字符看起来很奇怪.
但是,当我通过AJAX调用servlet并使用检索到的数据来填充选择框时,我得到了(似乎)所有具有重音符号的字符(例如我带有重音符号或重音符号,音乐符号或抑扬音符号) ).当我在Firebug下的Net选项卡中查看响应时,我可以看到文本看起来很好.但是,当我使用该数据填充选择框时,我会得到带有问号的钻石.
这些字符都是有效的ISO-8859-1字符,所以我不明白为什么它们没有正确显示.
编辑
更多信息.我用GET,jQuery.ajax我已经开始scriptCharset了ISO-8859-1.在服务器端,我已经明确地将编码设置为ISO-8859-1request.setCharacterEncoding("ISO-8859-1");
编辑
代码示例:
这就是我目前所拥有的.我scriptCharset: "ISO-8859-1"没有添加任何效果.
jQuery.ajax({
url: "/countryAndProvinceCodeServlet",
data: data,
dataType: "json",
type: "GET",
success: function(data) {
...
},
});
Run Code Online (Sandbox Code Playgroud)
我的servlet使用org.json.JSONObject并通过执行简单输出字符串response.getWriter().print(jsonObject.toString());
UPDATE
约每JSON,以及如何它应该是UTF-8的评论,我想看看我是否能获取数据为文本(所以设置dataType到text中jQuery.ajax),然后评估它作为自己的JSON(在Javascript).这似乎也不起作用!当我这样做时console.log,我仍然可以获得时髦的钻石.但是,当我在Firebug的Net选项卡下查看它时,一切都显示正常:
网络标签:
{"error":false,
"provinces":{"DZ-01":"Adrar",
"DZ-16":"Alger",
"DZ-23":"Annaba",
"DZ-44":"Aïn Defla",
"DZ-46":"Aïn Témouchent",
"DZ-05":"Batna",
"DZ-07":"Biskra",
"DZ-09":"Blida",
"DZ-34":"Bordj Bou Arréridj",
"DZ-10":"Bouira",
"DZ-35":"Boumerdès",
"DZ-08":"Béchar",
"DZ-06":"Béjaïa",
"DZ-02":"Chlef",
"DZ-25":"Constantine",
"DZ-17":"Djelfa",
"DZ-32":"El Bayadh",
"DZ-39":"El Oued",
"DZ-36":"El Tarf", …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,允许用户将字符串持久化到数据库,这些字符串可能包含表情符号.我遇到的问题是表情符号,例如 will get stored in MySQL as 😊
当我使用PHP MySQL客户端检索此字符串并在Web浏览器中呈现它时,它可能因为Content-Type设置为UTF-8 而呈现得很好.当我尝试读取node.js中的字符串时,我回想起我认为ISO8859-1编码的文字😊.桌子上的字符集设置为latin1,这就是我从中获取ISO8859-1的地方.
在node.js中对字符串进行编码的正确方法是什么,以便在字符串中我可以看到表情符号而不是MySQL设置的编码console.log?