键盘乱码怎么恢复,机械键盘乱码怎么恢复
如何恢复乱码键盘(如何恢复乱码机械键盘)
字符集转换概述
我们需要解释这个特性实际上是人类的概念。计算机可以不关心哪些字符,只关心这个字符对应的字节码。您的计算机如何知道哪些字符集用于一个字节序列?计算机不知道,所以实际上,在计算机中表示一个字符串时,需要包含在同一个字符集中,像这样(作为C语言的例子):
Class { byte * contentcharset _ info * charset}比如我们现在有一个UTF8。字符集编码汉字'我',所以它意味着计算机不仅存储。' I' UTF8编码0xe68891。您还需要存储它是哪个字符集编码信息的信息:
{内容:0xE68891字符集:UTF8}内部电脑包含了一个字库,会设置成另一种字符集,也就是字符的编码可以成功转换成另一种字符集,我们会被调用进行字符集转换。例如,我们可以将上面提到的UTF8字符集转换为GBK字符集编码的形式,并将其转换为:
{ Content:0x ced 2;字符集:GBK;}提示:我们上面的“编码”可以作为动词,也可以理解为名词。当动词表示将字符拍摄成字节序列的过程时,名称作为名称表示字符对应的字符。基于上下文,每个人都知道“编码”的含义。
MySQL客户端和服务器如何通信发送到服务器的MySQL客户端的响应和发送到客户端的响应实际上是符一定格式的。我们提前调用数据格式的MySQL通信协议,这个协议是开放的。我们可以简单分析一下这个通信协议,简单的拦截软件比如Wireshark。理解了这个通信协议之后,我们甚可以执行自己的客户端软件。市面上有各种各样的MySQL客户端软件,我们不想一一分析。现在我们只选择MySQL安装目录。框自给自足的mysql。编程(这里)mysql。这个程序引用了mysql这个名字。可执行文件),如图所示:
执行我们电脑黑匣子里的可执行文件,相当于启动客户端,就像这样:
提示:这里的“黑匣子”指的是Windows操作系统中的CMD.exe或外壳。
我们通常按照以下步骤使用MySQL:
启动客户端并连接到服务器
客户端发送请求。
服务器接收请求
服务器处理请求
服务器处理请求,为这个客户机生成一个响应
客户收到回应。
我们在分析的每一步都减少了受影响的字符集。
启动客户端并连接到服务器进程。
每个MySQL客户端维护客户端的默认字符集,该字符集基于以下例程:
检测自动操作系统使用的字符集。
MySQL客户端会在启动时检测当前正在使用的操作系统所使用的字符集,并映射出某种规则所支持的一些字符集(通常是操作系统当前使用的字符集,为什么在字符集中会有一些特殊情况,例如如果操作系统当前是ASCII,就会映射到LATIN1字符集)。
当我们使用UNIX操作系统时;
调用操作系统nl_langinfo(Codeset)获取操作系统当前正在使用的字符集的函数,而这个函数的结果取决于LC_ALL中的三个环境变量LC_ALL,然后是lc_ctype,然后是l .优先级比率lc_ctype。为高电平,lc_ctype。优先级比L高。换句话说,如果设置了LC_ALL。是设置lc_ctype还是LLC_ALL。这是准则;如果LC_ALL未设置。所以lc_ctype。它是准确的;如果都不是LC_ALL。也没有设置lc_ctype,只有L才是准确的。例如,我们将放置环境变量。LC_ALL。设置en_cn.utf-8。像这样:
导出lc_all=zh_cn.utf-8
然后我们在黑匣子里启动MySQL客户端,MySQL客户端检测到这个操作系统的使用。格式
8.字符集,并将客户端默认字符设置为UTF8.。当然,如果没有设置这三个环境变量,那么nl_langinfo(Codeset)该函数将返回操作系统的默认字符集,即在我身边。Macos 10.15.3.在操作系统中,默认字符集是:美国 - ascii.
此时,NESQL客户端的默认字符集将被设置为拉丁语。此外,我们还需要强调当我们使用黑匣子显示字符时,有一个的字符集,例如使用我的Mac。iterm2.作为黑色框架,我们可以打开:项 - >配置文件 - >终端选项卡,您可以看到iterm2.采用UTF8.要显示字符:
我们一般需要将用于黑匣子中使用的编码显示为操作系统当前使用的代码和代码。如果它不一致,我们点击的字符可能不会显示在屏幕上。例如,如果我愿意LC_ALL.属性设置GBK.然后,让我们输入汉字到黑匣子,屏幕不会显示,就像这样(如下图所示,我点击汉字'一世'影响):
当我们使用Windows操作系统时
调用操作系统getconsolecp.获取当前正在由操作系统使用的字符集的功能。在Windows中,CMD.exe使用的字符集将被映射到一个名为代码页的数字(英文名称:代码页面),我们可以单击右键单击cmd.exe.标题栏,然后单击“属性” - >选项,如下所示,当前代码页面值为936,它表示使用GBK字符集的当前CMD.exe:
更容易,我们可以跑CHCP.该令直接查看当前代码页面:
以这种方式,当我们在黑框中启动MySQL客户端时,MySQL客户端会检测到使用此操作系统。GBK.字符集,并将客户端默认字符设置为GBK.。对应于之前提到的UTF8字符集的代码页。65001如果当前代码页的值为65001,则启动MySQL客户端,然后客户端的默认字符集将成为UTF8.。如果MySQL不支持当前正在使用的自动检测到的操作系统,或者如果在某些情况下不允许自动检测,则MySQL使用其自己的内置默认字符集作为客户端默认字符集。此内置默认字符集是mysql 5.7先前的版本是拉丁语,存在mysql 8.0修改以便UTF8MB4.。用过的默认字符集启动参数如果我们开始使用MySQL客户端默认字符集启动参数,然后客户端的默认字符集将不再检测到当前正在由操作系统使用的字符集,但直接使用启动参数。默认字符集指定的值。例如,我们使用以下令启动客户端:
MySQL - 默认字符集= UTF8
然后无论我们使用的操作系统是什么,操作系统当前使用该字符集,我们将所有都使用UTF8作为MySQL客户端的默认字符集。
在确认MySQL客户端的默认字符集之后,客户端将登录请求启动到服务器,发送诸如用户名,密码和客户端的客户端的信息的某些信息,客户端收到后的信息是什么?服务器,客户端即将发送,什么是字符集编码的字符集编码,以及您生成的响应应该在字符集之后编码在什么字符集(实际上,服务器正在理解客户端的默认值) , 它会character_set_client.那character_set_connection.也character_set_result.这些系统变量设置为此值)。
客户发送请求成功登陆后,我们可以使用键盘键入我们要在黑匣子中输入的MySQL语句。输入后,您可以单击Enter键作为向服务器发送状态的请求,但客户端发送的语句(本质是字符串是什么?字符集是什么?这实际上涉及交互应用程序和操作系统之间,我们的MySQL客户端程序实际上是一个应用程序,它从黑框中读取数据。实际上是调用操作系统提供的读取接口。在不同的操作系统中,呼叫读取界面实际上是不同,我们还讨论了这种情况:
对于UNIX操作系统
当我们使用输入法软件进入黑匣子中的字符时,使用的编码字符集实际上是当前的操作系统集。例如,LC_ALL.环境变量的值是en_cn.utf-8.然后,意味着使用UTF8字符集实际编码黑帧中的字符。稍后MySQL客户端程序将调用由黑盒子的操作系统提供的读取功能(实际上,来自标准输入流的所谓读取数据),数据读取实际上使用UTF8字符集进行编码。字节序列,它稍后将此字节序列作为请求内容发送到服务器。这实际上会产生问题,如果客户端的默认字符集和当前正在使用操作系统,则将产生更令人尴尬的结果。例如,我们携带客户。- default-character-set = gbk启动参数,然后将客户端的默认字符集设置为GBK,如果此时使用操作系统,则字符集是UTF8。例如,我们的陈述包含汉字。'一世'然后,然后客户呼叫读函数读取的字节序列实际上是0xe68891.,这将是0xe68891.将其发送到服务器,服务器相信来自客户端的请求由GBK编码,这将产生问题(当然,这只是乱码问题的前奏,并不意味着乱码,只在一步中乱码乱码仅当客户端应用程序写入由服务器返回的数据到黑匣子时,才会发生客户端应用程序。适用于Windows操作系统
在Windows操作系统中,来自黑匣子盒的读取数据是Windows提供的Windows。readconsolew.功能。执行此功能后,MySQL客户端获取一个宽字符数组(实际上,一组16位Unicode),那么客户端需要将宽字符数组再??次转换为客户端设置为字节序列的默认字符。然后,然后将单词序列发送到服务器作为请求的内容。这可以在UNIX操作系统中生成,但可以在Windows系统中避免它。例如,我们携带客户。- default-character-set = gbk启动参数,然后将客户端的默认字符集设置为GBK,如果使用采用的字符集是UTF8。例如,我们的陈述包含汉字。'一世'然后,然后客户呼叫readconsolew.该功能首先读取代表一世单词宽度字符数组,然后将其转换为客户端的默认字符集,这是由GBK字符集编码的数据。0xced2.,然后0xced2.发送到服务器。此时,服务器还认为客户端发送的请求用GBK编码,因此它完全正确?服务器接收请求服务器收到的请求本质上是一个字节序列,并且服务器将被视为系统变量。character_set_client.代表性字符集执行编码字节序列。character_set_client.它是一个会话级系统变量,即在每个客户端和服务器建立连接之后,服务器将保持一个单独的character_set_client.变量,每个客户端将使用客户端的默认字符设置到服务器时服务器登录,然后服务器将客户端设置为独占。character_set_client.。我们可以单独修改Set令character_set_client.相应的值是这样的:设置字符_set_client = gbk;必须意识到是,character_set_client.相应的字符集必须包括请求中的字符,例如我们将放置character_set_client.放ASCII.并在请求中发送一个汉字。'一世'这将发生:
mysql> set character_set_client = ASCII;查询OK,0行受影响(0.00秒)MySQL>显示“字符%”等变量;+ ------------------------------------------- ---------------------------------------------------------------------------------- ------- -------------------------------|变量_Name |价值|+ ------------------------------------------- ---------------------------------------------------------------------------------- ------- -------------------------------| character_set_client | ASCII || character_set_connection | UTF8 || character_set_database |. UTF8 || character_set_filesystem |二进制|| character_set_results | UTF8 || character_set_server | UTF8 || character_set_system | UTF8 || character_sets_dir | /usr/local/cellar/mysql/5.7.21/share/mysql/charsets/ |+ ------------------------------------------- ---------------------------------------------------------------------------------- ------- -------------------------------套装8行(0.00秒)mysql>选择'i';+ --- +| ??? |+ --- +| ??? |+ --- +设置1行,1条警告(0.00秒)mysql> SHOW WARNINGS\G************************** 1.行******************** * ******级别:警告代码:1300Message: Invalid ascii character string: '\xE6\x88\x91'套装1行(0.00秒)如图所示,最终提示'E6,88,91'不是正确的ASCII字符。
提示:您可以将Character_set_Client设置为Latin1,请参阅警告,为什么?
服务器处理请求服务器在处理请求时将请求中的字符转换为特定字符集,这是一个系统变量。character_set_connection.表示系统变量也是会话级别。登录服务器时,每个客户端都会通知服务器,然后服务器将客户端设置为独占。character_set_connection.。但是,我们可以通过SET令单独更改此项。character_set_connection.系统变量。例如,客户端被发送到服务器以包括字节序列。0xe68891.,然后为客户端进行系统变量的服务器character_set_client.为了UTF8.,然后服务器会知道字节序列实际上代表汉字。'一世'如果服务器是客户的系统变量,则此时character_set_connection.对于GBK,那么需要将字符转换为计算机中的GBK字符集的形式,即0xced2.。有些学生可能会认为这一步有点像脱掉裤子,但请考虑这个问题声明:
mysql>选择'a'='a';您是否有此查询语句的返回结果?应该是真的还是假的?事实上,结果是不确定的。这是因为我们不知道将两个字符串的大小与底部比较了什么!我们应该考虑两个方面:
考虑一个:使用什么样的字符集?
考虑2:在识别编码这些字符串的字符集之后,表示每个字符串将映射到字节序列,然后我们如何比较这些字节,它直接比较了它们的二进制大小,或者有其他比较方法吗?例如'一种'和'一种'UTF8字符集下的编码是0x61和0x41,所以'a'='a'它应该直接比较0x61和0x41大小,或者会0x61减去32后,尺寸更重要,这两种比较方法可以是,每种比较方法我们被称为一种类型比较规则(英文名:整理。mysql.支持几个字符集,我们可以使用显示Charse网站站点" rel="nofollow" />