2019年9月

https://blog.csdn.net/weixin_30685047/article/details/94999645

客户端传来UTF-8的表单,服务器的asp用的是GBK,因而服务器端会按照GBK编码读取表单,因而就会乱码 实际上这个时候在服务器里拿到的表单已经是被GBK处理过了的,而要显示出正确的文字,需要把GBK编解码过的文字重新编码,然后用对应的UTF-8再次解码,所以实际上对二进制做的是UTF-8解码从而得到GB2312环境下的正确显示。

原因是,在GB2312里面,汉字两字节一编码,UTF-8三字节一编码,GBK会替换一些不支持的编码为?,ASCII值为63,相当于修改了UTF-8的二进制数据,偶数个汉字运气好,奇数个汉字显然结尾的数据会被破坏,嗯,这就是原因。

解决思路显然是想办法不要让服务器先用GBK进行表单解码了,因而方法有二:

  1. 想办法拿到二进制的表单,然后直接使用正确的代码页解码;
  2. 看能不能把asp换到UTF-8的环境下吧。

来自[纳兰鸟儿]的 http://www.moeje.org/%E3%81%B2%E3%81%A4%E3%81%98%E9%9B%B2%E3%81%AE%E7%A9%BA%E3%81%AB-fd%E7%B3%BB%E5%88%97/

(7)#4 #4#43(7)#4#5#43(7)#1   (7)(6)3#23#43
3#2#1(77)(7)3    (7)(6)(#5)(6)(7)3#4#53
(7)#4 #4#43(7)#4#5#43(7)#1   (7)(6)3#23#43
3#2#1(77)(7)3    (7)(6)(#5)(6)(7)33#4
#4 #4#4323     #1#1#2 #2#23#4(7)(7)3      
66#5#43#4      (7)66#5#43#4

6 666#5#43#1(6)   666 6#5#43
6 66#56776#56 #4[222][2][#1]7667[#1]76
6 666#5#43#1(6)   666 6#5#43
6 66#56776#5#4 5#4[222][2][#1]66   [222][#1][2][3]6
#5676

(7)#4 #4#43(7)#4#5#43(7)#1   (7)(6)3#23#43
3#2#1(77)(7)3    (7)(6)(#5)(6)(7)33#4
#4 #4#4323     #1#1#2 #2#23#4(7)(7)3      
66#5#43#4      (7)66#5#43#4

间奏笛子轨{5312(765)}    {67[2][5]7[5]}

#6 7#67   7#67  7#6#5#4  #1#4#3#4#5  #1#5#4#5#6
#6 7#67   7#67  7[#1][#2]#4  #4#4#3#1 #4#3#4#5

6 666#5#43#1(6)   666 6#5#43
6 66#56776#56 #4[222][2][#1]7667[#1]76
6 666#5#43#1(6)   666 6#5#43
6 66#56776#5#4 5#4[222][2][#1]66   [222][#1][2][3]6
#5676

配合(似乎是一起的?)演奏食用:https://www.bilibili.com/video/av3353940/
Butter Music大草 看了百度翻译才反应过来

主要起因是IPv6的出现吧。。现在大部分卖得火的便宜路由器往往会因为要么存储空间或RAM太小,或者CPU等硬件尚未得到支持而无法使用诸如OpenWRT一类的第三方固件。估计是出于商业目的吧,现在的路由器都不会宣称自己支持IPv6,到时候路由器就可以卖两道了。(然而放在移动放在学校寝室里的华为的接入点可以支持IPv6,估计要上千)然后接上自己的路由器,IPv6地址就没了,怪可惜的。因而打算同时支持IPv4+IPv6的“路由器”,学校接入点每次都要登陆,显然不行,主角就打算选这个刚买的开发板了。在我原本的想象中,这件事应该是十分简单的,计算机网络理论十分完整而清晰,再加上GNU这样的开源组织,多少也会提供一个能用的解决方案吧,毕竟路由器这玩意还是十分实用的。结果后来发现,著名的OpenWRT还是因为Cisco因为偷偷使用了Linux才不得不开源的。开源路由固件大头都要靠这种方式开头,这发展指望不得啊,唉。。。

现在的探索历程就很迷,在国内搜,估计基本tmd都是为了应付计网实验的,两台主机,静态ip,加个ip forward完事,要不就是vmware;在国外,也差不多只会实现流量转发的功能,不过写得比较实在,会在标题写上“流量转发”四个大字而不是像国内一样,不但话说不清楚,反倒觉得自己很NB了。看了一下鸟叔的Linux私房菜,不过里面关于路由器的那部分,层次有点高。。那真的是讲路由器的,不过是路由器之间的配置,上升到RIP和OSPF那个层次了。。我想要和下层设备的交互部分,DHCP啊。。

可能是没有找到正确博客的原因吧,在各大搜索引擎上零零散散地只是搜集到了一些相关的组件,比如Linux内核自带的IP转发IP forwarding功能,具有类似IP防火墙功能的iptables提供了网络地址转换NAT功能,hostapd提供的Wi-Fi热点功能,以及提供PPPoE拨号的pppoepppoeconf软件包(Ubuntu)。这虽然已经构成了路由器最基本的功能:数据的定向转发,但是离日常生活中花钱买的路由器还是有点距离的。除路由器的核心功能外,最关键的,也是最常用的一个,私以为便是DHCP了。

从stackoverflow上获得推荐的,ubuntu的官方路由搭建指导: https://help.ubuntu.com/community/Router

里面提到了一个DHCP服务器,不过Debian Buster的apt里面好像没有这个包: https://help.ubuntu.com/community/dhcp3-server

到时候有时间试试手动编译吧。

目前对于整个架构的设想: 使用开发板上的千兆网口作为网络输入,开发板上装Linux系统并进行有线网拨号;(已实现,pppoe) 插入无线网卡(RTL8188EU,已有内置驱动支持),作为Wi-Fi热点的发射装置;(已实现,hostapd) 使用虚拟网桥将有线网与Wi-Fi连接,让连入了Wi-Fi的设备可以手动配置后上网;(根据进一步的调查,发现这个可能要用iptables比较好,网桥的话,pppoe不知道能不能作为设备连接起来) 添加DHCP等路由器-终端自动配置服务,自动完成无线网络参数配置; 最后,如果可能的话,再更改一下Wi-Fi的认证机制,使其支持企业级认证。(记录一下,可能考虑用LEAP或者PEAP)

  1. 官网,Dowload部分选择合适的版本下载。如果没有特别要求,可以直接无脑装个最新版,本地还要配合适的java运行环境,可以也直接挑最新的。当然,若是对java有一定了解的可以去看看有个帮你区分版本区别的页面,找一个满足最低要求的组合就行,如果不想在电脑上修改太多软件配置的话。在下使用的是Java 8 + Tomcat 9。

  2. 选择用installer安装的话可以直接一把梭,因而不作赘述。在此选择Core版本的zip包,下载解压,里面是一套较为标准的Linux文件树目录。

  3. 阅读RUNNING.txt可以获得将Tomcat运行起来所需要的一系列基本配置。本文是参照该指示,从中选取部分关键配置而将Tomcat运行起来的一系列记录。

  4. 高级系统设置-环境变量,建立新项设置CATALINA_HOME。该选项是必须在Tomcat运行前定义的,用于指示Tomcat的家目录,其意义同JAVA_HOME,指向Tomcat的bin目录的上一级。其余变量可以通过下一步的方式,在文件中定义,方便管理和多实例运行。

  5. bin目录下新建setenv.bat,该文件用于提供绝大部分Tomcat运行环境所需要的参数值,Tomcat会自动寻找该文件。(没有的话自动忽略呗,因为要手动配置,所以Apache干脆直接不提供这个文件了)在里面需要明确至少一个选项:JAVA_HOME/JRE_HOME。亦即是说,在配置多实例的Tomcat的时候,允许不同实例使用不同版本的java。不需要将变量值用引号包裹,即使路径里含有空格。

  6. 由于Tomcat提供了默认的配置文件,因而在配置好环境后可跳过软件内部的配置,直接运行。使用bin目录下的脚本进行对应的操作: 启动Tomcat:startup.bat / catalina.bat start 关闭Tomcat:shutdown.bat / catalina.bat stop

  7. 使用默认配置启动Tomcat后,可以访问http://localhost:8080进行测试,会出现一个管理界面,说明配置并启动成功。

  8. 此时若是关注Tomcat的日志输出,会发现出现如淇℃伅一类的乱码。这是由于Windows控制台和Tomcat中文编码不一致导致的。Tomcat提供了汉化的提示信息,上面这个是“信息”二字经过UTF-8编码后,又经GBK解码出现的结果。解决方法有二: 1) 修改conf目录下的logging.properties文件,把java.util.logging.ConsoleHandler.encoding的对应值修改为GBK; 2) 在bin/setenv.bat中添加一行:

    SET JAVA_OPTS=-Duser.language=en

    将JVM的语言设置为英文,这样看着也更熟悉,也避免了中文乱码的问题。当然可以配合第一条使用,不然算是治标不治本。 JAVA_OPTS是传递给JVM的一系列指令,可以填写多个选项,应该是同上一样空格隔开不加引号即可。 然而指导文件中提到,若要限制Tomcat的资源占用,应该在CATALINA_OPTS里而不是这里进行设置。

  9. 若要观察服务器状态,Tomcat提供了该功能,但是出于安全考虑,设计了一套权限管理系统。 修改conf目录下的tomcat-users.xml以注册用户: 在tomcat-users标签里添加:
    <role rolename="tomcat"/>
    <user username="tomcat" password="tomcat" roles="tomcat,manager-gui"/>

    可将用户tomcat以密码tomcat添加至该Tomcat实例的管理用户。由上可见,若是用户要加入不同的组,可以通过逗号隔开即可。 然后就可用tomcat/tomcat用户名-密码对登陆管理界面。

在一开始接触Mathematica的时候,对它的理解可能更加接近解释型语言,比如Python一类的,输入和输出是确定对应的。 Mathematica里的赋值运算符有两种,=:=。前者就是传统的赋值,后者叫做“延时赋值”,即在使用到被赋值变量时才计算其对应的值。一开始并没有仔细看文档,只是发现两者的区别是在句尾不加分号的时候,前者会输出计算值,后者不会,以为区别在这里。。但是这是错误用法 而后在进行高级运用,涉及到了带有循环编程的时候,程序就开始报错了,说递归超过最大深度。在简单的尝试后,发现将:=替换成=问题就解决了,这才意识到自己之前对这两个操作符的理解可能有误。

简要总结: =赋值符用于立即赋值,适合最为广泛的面向过程编程; :=用于延时赋值,对于函数的定义需要使用这个符号(显然传入了自变量值才能计算出结果来嘛),可能更多用于函数式编程,一般的数值计算不要轻易用这个符号; ;加在句尾,可用于在一行做多条语句的分隔符,同时在句尾添加了分号的语句将不会产生输出,与Matlab的分号抑制输出功能相同。