当前位置: 首页 > news >正文

网站建设1000zhu济南家居行业网站开发

网站建设1000zhu,济南家居行业网站开发,怎么添加网站,微信营销技巧摘自#xff1a;http://www.cnblogs.com/yaya-yaya/p/5768616.html红色 主要点  灰色 内容 绿色 知识点 橘色 补充内容几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题#xff0c;那就是为什么要编码#xff1f;我们能不能不编码#xff1f;要… 摘自http://www.cnblogs.com/yaya-yaya/p/5768616.html 红色 主要点     灰色 内容      绿色  知识点    橘色 补充内容 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题那就是为什么要编码我们能不能不编码要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的这些符号也就是我们人类使用的语言。由于人类的语言有太多因而表示这些语言的符号太多无法用计算机中一个基本的存储单元—— byte 来表示因而必须要经过拆分或一些翻译工作才能让计算机能理解。我们可以把计算机能够理解的语言假定为英语其它语言要能够在计算机中使用必须经过一次翻译把它翻译成英语。这个翻译的过程就是编码。所以可以想象只要不是说英语的国家要能够使用计算机就必须要经过编码。这看起来有些霸道但是这就是现状这也和我们国家现在在大力推广汉语一样希望其它国家都会说汉语以后其它的语言都翻译成汉语我们可以把计算机中存储信息的最小单位改成汉字这样我们就不存在编码问题了。 所以总的来说编码的原因可以总结为 计算机中存储信息的最小单元是一个字节即 8 个 bit所以能表示的字符范围是 0~255 个 人类要表示的符号太多无法用一个字节来完全表示 要解决这个矛盾必须需要一个新的数据结构 char从 char 到 byte 必须编码 如何“翻译” 明白了各种语言需要交流经过翻译是必要的那又如何来翻译呢计算中提拱了多种翻译方式常见的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。它们都可以被看作为字典它们规定了转化的规则按照这个规则就可以让计算机正确的表示我们的字符。目前的编码格式很多例如 GB2312、GBK、UTF-8、UTF-16 这几种格式都可以表示一个汉字那我们到底选择哪种编码格式来存储汉字呢这就要考虑到其它因素了是存储空间重要还是编码的效率重要。根据这些因素来正确选择编码格式下面简要介绍一下这几种编码格式。 ASCII 码 https://baike.so.com/doc/7103239-7326232.html学过计算机的人都知道 ASCII 码总共有 128 个用一个字节的低 7 位表示0~31 是控制字符如换行回车删除等32~126 是打印字符可以通过键盘输入并且能够显示出来。 ISO-8859-1  https://baike.so.com/doc/6779888-6996029.html128 个字符显然是 不够用的于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码它们是 ISO-8859-1~ISO-8859-15其中 ISO-8859-1 涵盖了大多数西欧语言字符所有应用的最广泛。ISO-8859-1 仍然是单字节编码它总共能表示 256 个字符。 GB2312  https://baike.so.com/doc/6612955-6826748.html?from166822sid6826748redirectsearch它的全称是《信息交换用汉字编码字符集 基本集》它是双字节编码总的编码范围是 A1-F7其中从 A1-A9 是符号区总共包含 682 个符号从 B0-F7 是汉字区包含 6763 个汉字。 GBK https://baike.so.com/doc/2389354-2526441.html全称叫《汉字内码扩展规范》是国家技术监督局为 windows95 所制定的新的汉字内码规范它的出现是为了扩展 GB2312加入更多的汉字它的编码范围是 8140~FEFE去掉 XX7F总共有 23940 个码位它能表示 21003 个汉字它的编码是和 GB2312 兼容的也就是说用 GB2312 编码的汉字可以用 GBK 来解码并且不会有乱码。 GB18030 全称是《信息交换用汉字编码字符集》是我国的强制标准它可能是单字节、双字节或者四字节编码它的编码与 GB2312 编码兼容这个虽然是国家标准但是实际应用系统中使用的并不广泛。 UTF-16 说到 UTF 必须要提到 UnicodeUniversal Code 统一码ISO 试图想创建一个全新的超语言字典世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂关于 Unicode 的详细规范可以参考相应文档。Unicode 是 Java 和 XML 的基础下面详细介绍 Unicode 在计算机中的存储形式。 UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式这个是定长的表示方法不论什么字符都可以用两个字节表示两个字节是 16 个 bit所以叫 UTF-16。UTF-16 表示字符非常方便每两个字节表示一个字符这个在字符串操作时就大大简化了操作这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。 UTF-8 UTF-16 统一采用两个字节表示一个字符虽然在表示上非常简单方便但是也有其缺点有很大一部分字符用一个字节就可以表示的现在要两个字节表示存储空间放大了一倍在现在的网络带宽还非常有限的今天这样会增大网络传输的流量而且也没必要。而 UTF-8 采用了一种变长技术每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。 UTF-8 有以下编码规则 如果一个字节最高位第 8 位为 0表示这是一个 ASCII 字符00 - 7F。可见所有 ASCII 编码已经是 UTF-8 了。 如果一个字节以 11 开头连续的 1 的个数暗示这个字符的字节数例如110xxxxx 代表它是双字节 UTF-8 字符的首字节。 如果一个字节以 10 开始表示它不是首字节需要向前查找才能得到当前字符的首字节 Java 中需要编码的场景 前面描述了常见的几种编码格式下面将介绍 Java 中如何处理对编码的支持什么场合中需要编码。 I/O 操作中存在的编码 我们知道涉及到编码的地方一般都在字符到字节或者字节到字符的转换上而需要这种转换的场景主要是在 I/O 的时候这个 I/O 包括磁盘 I/O 和网络 I/O关于网络 I/O 部分在后面将主要以 Web 应用为例介绍。下图是 Java 中处理 I/O 问题的接口  Reader 类是 Java 的 I/O 中读字符的父类而 InputStream 类是读字节的父类InputStreamReader 类就是关联字节到字符的桥梁它负责在 I/O 过程中处理读取字节到字符的转换而具体字节到字符的解码实现它由 StreamDecoder 去实现在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。值得注意的是如果你没有指定 Charset将使用本地环境中的默认字符集例如在中文环境中将使用 GBK 编码。 写的情况也是类似字符的父类是 Writer字节的父类是 OutputStream通过 OutputStreamWriter 转换字符到字节。如下图所示  同样 StreamEncoder 类负责将字符编码成字节编码格式和默认编码规则与解码是一致的。 如下面一段代码实现了文件的读写功能  Java代码   String file  c:/stream.txt;    String charset  UTF-8;    // 写字符换转成字节流   FileOutputStream outputStream  new FileOutputStream(file);    OutputStreamWriter writer  new OutputStreamWriter(    outputStream, charset);    try {       writer.write(这是要保存的中文字符);    } finally {       writer.close();    }    // 读取字节转换成字符   FileInputStream inputStream  new FileInputStream(file);    InputStreamReader reader  new InputStreamReader(    inputStream, charset);    StringBuffer buffer  new StringBuffer();    char[] buf  new char[64];    int count  0;    try {       while ((count  reader.read(buf)) ! -1) {           buffer.append(buffer, 0, count);       }    } finally {       reader.close();    }    在我们的应用程序中涉及到 I/O 操作时只要注意指定统一的编解码 Charset 字符集一般不会出现乱码问题有些应用程序如果不注意指定字符编码中文环境中取操作系统默认编码如果编解码都在中文环境中通常也没问题但是还是强烈的不建议使用操作系统的默认编码因为这样你的应用程序的编码格式就和运行环境绑定起来了在跨环境下很可能出现乱码问题。 内存中操作中的编码 在 Java 开发中除了 I/O 涉及到编码外最常用的应该就是在内存中进行字符到字节的数据类型的转换Java 中用 String 表示字符串所以 String 类就提供转换到字节的方法也支持将字节转换为字符串的构造函数。如下代码示例  Java代码   String s  这是一段中文字符串;     byte[] b  s.getBytes(UTF-8);     String n  new String(b,UTF-8);    另外一个是已经被被废弃的 ByteToCharConverter 和 CharToByteConverter 类它们分别提供了 convertAll 方法可以实现 byte[] 和 char[] 的互转。如下代码所示  Java代码   ByteToCharConverter charConverter  ByteToCharConverter.getConverter(UTF-8);    char c[]  charConverter.convertAll(byteArray);    CharToByteConverter byteConverter  CharToByteConverter.getConverter(UTF-8);    byte[] b  byteConverter.convertAll(c);    这两个类已经被 Charset 类取代Charset 提供 encode 与 decode 分别对应 char[] 到 byte[] 的编码和 byte[] 到 char[] 的解码。如下代码所示  Java代码   Charset charset  Charset.forName(UTF-8);     ByteBuffer byteBuffer  charset.encode(string);     CharBuffer charBuffer  charset.decode(byteBuffer);    编码与解码都在一个类中完成通过 forName 设置编解码字符集这样更容易统一编码格式比 ByteToCharConverter 和 CharToByteConverter 类更方便。 Java 中还有一个 ByteBuffer 类它提供一种 char 和 byte 之间的软转换它们之间转换不需要编码与解码只是把一个 16bit 的 char 格式拆分成为 2 个 8bit 的 byte 表示它们的实际值并没有被修改仅仅是数据的类型做了转换。如下代码所以  Java代码   ByteBuffer heapByteBuffer  ByteBuffer.allocate(1024);     ByteBuffer byteBuffer  heapByteBuffer.putChar(c);    以上这些提供字符和字节之间的相互转换只要我们设置编解码格式统一一般都不会出现问题。 Java 中如何编解码 前面介绍了几种常见的编码格式这里将以实际例子介绍 Java 中如何实现编码及解码下面我们以“I am 君山”这个字符串为例介绍 Java 中如何把它以 ISO-8859-1、GB2312、GBK、UTF-16、UTF-8 编码格式进行编码的。  Java代码   public static void encode() {            String name  I am 君山;            toHex(name.toCharArray());            try {                byte[] iso8859  name.getBytes(ISO-8859-1);                toHex(iso8859);                byte[] gb2312  name.getBytes(GB2312);                toHex(gb2312);                byte[] gbk  name.getBytes(GBK);                toHex(gbk);                byte[] utf16  name.getBytes(UTF-16);                toHex(utf16);                byte[] utf8  name.getBytes(UTF-8);                toHex(utf8);            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }     }    我们把 name 字符串按照前面说的几种编码格式进行编码转化成 byte 数组然后以 16 进制输出我们先看一下 Java 是如何进行编码的。 下面是 Java 中编码需要用到的类图 图 1. Java 编码类图  首先根据指定的 charsetName 通过 Charset.forName(charsetName) 设置 Charset 类然后根据 Charset 创建 CharsetEncoder 对象再调用 CharsetEncoder.encode 对字符串进行编码不同的编码类型都会对应到一个类中实际的编码过程是在这些类中完成的。下面是 String. getBytes(charsetName) 编码过程的时序图 图 2.Java 编码时序图  从上图可以看出根据 charsetName 找到 Charset 类然后根据这个字符集编码生成 CharsetEncoder这个类是所有字符编码的父类针对不同的字符编码集在其子类中定义了如何实现编码有了 CharsetEncoder 对象后就可以调用 encode 方法去实现编码了。这个是 String.getBytes 编码方法其它的如 StreamEncoder 中也是类似的方式。下面看看不同的字符集是如何将前面的字符串编码成 byte 数组的 如字符串“I am 君山”的 char 数组为 49 20 61 6d 20 541b 5c71下面把它按照不同的编码格式转化成相应的字节。 按照 ISO-8859-1 编码 字符串“I am 君山”用 ISO-8859-1 编码下面是编码结果  从上图看出 7 个 char 字符经过 ISO-8859-1 编码转变成 7 个 byte 数组ISO-8859-1 是单字节编码中文“君山”被转化成值是 3f 的 byte。3f 也就是“”字符所以经常会出现中文变成“”很可能就是错误的使用了 ISO-8859-1 这个编码导致的。中文字符经过 ISO-8859-1 编码会丢失信息通常我们称之为“黑洞”它会把不认识的字符吸收掉。由于现在大部分基础的 Java 框架或系统默认的字符集编码都是 ISO-8859-1所以很容易出现乱码问题后面将会分析不同的乱码形式是怎么出现的。 按照 GB2312 编码 字符串“I am 君山”用 GB2312 编码下面是编码结果  GB2312 对应的 Charset 是 sun.nio.cs.ext. EUC_CN 而对应的 CharsetDecoder 编码类是 sun.nio.cs.ext. DoubleByteGB2312 字符集有一个 char 到 byte 的码表不同的字符编码就是查这个码表找到与每个字符的对应的字节然后拼装成 byte 数组。查表的规则如下  Java代码   c2b[c2bIndex[char  8]  (char  0xff)]    如果查到的码位值大于 oxff 则是双字节否则是单字节。双字节高 8 位作为第一个字节低 8 位作为第二个字节如下代码所示  Java代码   if (bb  0xff) {    // DoubleByte                if (dl - dp  2)                    return CoderResult.OVERFLOW;                da[dp]  (byte) (bb  8);                da[dp]  (byte) bb;     } else {                      // SingleByte                if (dl - dp  1)                    return CoderResult.OVERFLOW;                da[dp]  (byte) bb;     }    从上图可以看出前 5 个字符经过编码后仍然是 5 个字节而汉字被编码成双字节在第一节中介绍到 GB2312 只支持 6763 个汉字所以并不是所有汉字都能够用 GB2312 编码。 按照 GBK 编码 字符串“I am 君山”用 GBK 编码下面是编码结果  你可能已经发现上图与 GB2312 编码的结果是一样的没错 GBK 与 GB2312 编码结果是一样的由此可以得出 GBK 编码是兼容 GB2312 编码的它们的编码算法也是一样的。不同的是它们的码表长度不一样GBK 包含的汉字字符更多。所以只要是经过 GB2312 编码的汉字都可以用 GBK 进行解码反过来则不然。 按照 UTF-16 编码 字符串“I am 君山”用 UTF-16 编码下面是编码结果  用 UTF-16 编码将 char 数组放大了一倍单字节范围内的字符在高位补 0 变成两个字节中文字符也变成两个字节。从 UTF-16 编码规则来看仅仅将字符的高位和地位进行拆分变成两个字节。特点是编码效率非常高规则很简单由于不同处理器对 2 字节处理方式不同Big-endian高位字节在前低位字节在后或 Little-endian低位字节在前高位字节在后编码所以在对一串字符串进行编码是需要指明到底是 Big-endian 还是 Little-endian所以前面有两个字节用来保存 BYTE_ORDER_MARK 值UTF-16 是用定长 16 位2 字节来表示的 UCS-2 或 Unicode 转换格式通过代理对来访问 BMP 之外的字符编码。 按照 UTF-8 编码 字符串“I am 君山”用 UTF-8 编码下面是编码结果  UTF-16 虽然编码效率很高但是对单字节范围内字符也放大了一倍这无形也浪费了存储空间另外 UTF-16 采用顺序编码不能对单个字符的编码值进行校验如果中间的一个字符码值损坏后面的所有码值都将受影响。而 UTF-8 这些问题都不存在UTF-8 对单字节范围内字符仍然用一个字节表示对汉字采用三个字节表示。它的编码规则如下  Java代码   private CoderResult encodeArrayLoop(CharBuffer src,     ByteBuffer dst){                char[] sa  src.array();                int sp  src.arrayOffset()  src.position();                int sl  src.arrayOffset()  src.limit();                byte[] da  dst.array();                int dp  dst.arrayOffset()  dst.position();                int dl  dst.arrayOffset()  dst.limit();                int dlASCII  dp  Math.min(sl - sp, dl - dp);                // ASCII only loop                while (dp  dlASCII  sa[sp]  \u0080)                    da[dp]  (byte) sa[sp];                while (sp  sl) {                    char c  sa[sp];                    if (c  0x80) {                        // Have at most seven bits                        if (dp  dl)                            return overflow(src, sp, dst, dp);                        da[dp]  (byte)c;                    } else if (c  0x800) {                        // 2 bytes, 11 bits                        if (dl - dp  2)                            return overflow(src, sp, dst, dp);                        da[dp]  (byte)(0xc0 | (c  6));                        da[dp]  (byte)(0x80 | (c  0x3f));                    } else if (Character.isSurrogate(c)) {                        // Have a surrogate pair                        if (sgp  null)                            sgp  new Surrogate.Parser();                        int uc  sgp.parse(c, sa, sp, sl);                        if (uc  0) {                            updatePositions(src, sp, dst, dp);                            return sgp.error();                        }                        if (dl - dp  4)                            return overflow(src, sp, dst, dp);                        da[dp]  (byte)(0xf0 | ((uc  18)));                        da[dp]  (byte)(0x80 | ((uc  12)  0x3f));                        da[dp]  (byte)(0x80 | ((uc   6)  0x3f));                        da[dp]  (byte)(0x80 | (uc  0x3f));                        sp;  // 2 chars                    } else {                        // 3 bytes, 16 bits                        if (dl - dp  3)                            return overflow(src, sp, dst, dp);                        da[dp]  (byte)(0xe0 | ((c  12)));                        da[dp]  (byte)(0x80 | ((c   6)  0x3f));                        da[dp]  (byte)(0x80 | (c  0x3f));                    }                    sp;                }                updatePositions(src, sp, dst, dp);                return CoderResult.UNDERFLOW;     }    UTF-8 编码与 GBK 和 GB2312 不同不用查码表所以在编码效率上 UTF-8 的效率会更好所以在存储中文字符时 UTF-8 编码比较理想。 几种编码格式的比较 对中文字符后面四种编码格式都能处理GB2312 与 GBK 编码规则类似但是 GBK 范围更大它能处理所有汉字字符所以 GB2312 与 GBK 比较应该选择 GBK。UTF-16 与 UTF-8 都是处理 Unicode 编码它们的编码规则不太相同相对来说 UTF-16 编码效率最高字符到字节相互转换更简单进行字符串操作也更好。它适合在本地磁盘和内存之间使用可以进行字符和字节之间快速切换如 Java 的内存编码就是采用 UTF-16 编码。但是它不适合在网络之间传输因为网络传输容易损坏字节流一旦字节流损坏将很难恢复想比较而言 UTF-8 更适合网络传输对 ASCII 字符采用单字节存储另外单个字符损坏也不会影响后面其它字符在编码效率上介于 GBK 和 UTF-16 之间所以 UTF-8 在编码效率上和编码安全性上做了平衡是理想的中文编码方式。 Java Web 涉及到的编码 对于使用中文来说有 I/O 的地方就会涉及到编码前面已经提到了 I/O 操作会引起编码而大部分 I/O 引起的乱码都是网络 I/O因为现在几乎所有的应用程序都涉及到网络操作而数据经过网络传输都是以字节为单位的所以所有的数据都必须能够被序列化为字节。在 Java 中数据被序列化必须继承 Serializable 接口。 这里有一个问题你是否认真考虑过一段文本它的实际大小应该怎么计算我曾经碰到过一个问题就是要想办法压缩 Cookie 大小减少网络传输量当时有选择不同的压缩算法发现压缩后字符数是减少了但是并没有减少字节数。所谓的压缩只是将多个单字节字符通过编码转变成一个多字节字符。减少的是 String.length()而并没有减少最终的字节数。例如将“ab”两个字符通过某种编码转变成一个奇怪的字符虽然字符数从两个变成一个但是如果采用 UTF-8 编码这个奇怪的字符最后经过编码可能又会变成三个或更多的字节。同样的道理比如整型数字 1234567 如果当成字符来存储采用 UTF-8 来编码占用 7 个 byte采用 UTF-16 编码将会占用 14 个 byte但是把它当成 int 型数字来存储只需要 4 个 byte 来存储。所以看一段文本的大小看字符本身的长度是没有意义的即使是一样的字符采用不同的编码最终存储的大小也会不同所以从字符到字节一定要看编码类型。 另外一个问题你是否考虑过当我们在电脑中某个文本编辑器里输入某个汉字时它到底是怎么表示的我们知道计算机里所有的信息都是以 01 表示的那么一个汉字它到底是多少个 0 和 1 呢我们能够看到的汉字都是以字符形式出现的例如在 Java 中“淘宝”两个字符它在计算机中的数值 10 进制是 28120 和 2345316 进制是 6bd8 和 5d9d也就是这两个字符是由这两个数字唯一表示的。Java 中一个 char 是 16 个 bit 相当于两个字节所以两个汉字用 char 表示在内存中占用相当于四个字节的空间。 这两个问题搞清楚后我们看一下 Java Web 中那些地方可能会存在编码转换 用户从浏览器端发起一个 HTTP 请求需要存在编码的地方是 URL、Cookie、Parameter。服务器端接受到 HTTP 请求后要解析 HTTP 协议其中 URI、Cookie 和 POST 表单参数需要解码服务器端可能还需要读取数据库中的数据本地或网络中其它地方的文本文件这些数据都可能存在编码问题当 Servlet 处理完所有请求的数据后需要将这些数据再编码通过 Socket 发送到用户请求的浏览器里再经过浏览器解码成为文本。这些过程如下图所示  如上图所示一次 HTTP 请求设计到很多地方需要编解码它们编解码的规则是什么下面将会重点阐述一下 URL 的编解码 用户提交一个 URL这个 URL 中可能存在中文因此需要编码如何对这个 URL 进行编码根据什么规则来编码有如何来解码如下图一个 URL 图 4.URL 的几个组成部分  上图中以 Tomcat 作为 Servlet Engine 为例它们分别对应到下面这些配置文件中 Port 对应在 Tomcat 的 Connector port8080/ 中配置而 Context Path 在 Context path/examples/ 中配置Servlet Path 在 Web 应用的 web.xml 中的 servlet-mapping         servlet-namejunshanExample/servlet-name         url-pattern/servlets/servlet/*/url-pattern /servlet-mapping url-pattern 中配置PathInfo 是我们请求的具体的 ServletQueryString 是要传递的参数注意这里是在浏览器里直接输入 URL 所以是通过 Get 方法请求的如果是 POST 方法请求的话QueryString 将通过表单方式提交到服务器端这个将在后面再介绍。 上图中 PathInfo 和 QueryString 出现了中文当我们在浏览器中直接输入这个 URL 时在浏览器端和服务端会如何编码和解析这个 URL 呢为了验证浏览器是怎么编码 URL 的我们选择 FireFox 浏览器并通过 HTTPFox 插件观察我们请求的 URL 的实际的内容以下是 URLHTTP://localhost:8080/examples/servlets/servlet/ 君山 ?author 君山在中文 FireFox3.6.12 的测试结果   转载于:https://www.cnblogs.com/wengbm/p/8053501.html
http://wiki.neutronadmin.com/news/472892/

相关文章:

  • 临沂网站建设排名深圳龙岗区地图全图
  • 外包网站平台百度竞价推广是什么工作
  • 学习网站建设需要什么什么网站可以做国外生意
  • 山西做网站哪个好自己怎么健网站视频教程
  • 南充市建设局官方网站网络设计培训
  • 专业的网站建设流程北京学设计去哪个网站
  • 凡科网做的网站在百度上能找到吗购物网站建设个人总结
  • 怎么查域名有没有备案seo优化网站排名
  • 商城版网站制作站长工具5g
  • 西宁高端网站建设青岛seo网站排名
  • 海门建设局网站WordPress无缩略图文章筛选
  • 青羊区建设和交通网站石家庄新闻发布会
  • 可信网站认证的区别兼职网站开发
  • 淮安哪里做网站校园网站建设可行性分析
  • 做网站要做相应的app吗网站如何更换域名
  • 网站设计设鹤山市网站建设公司
  • 任县建设局网站阿里云企业邮箱收费标准
  • 沈阳网站提升排名asp.net网站
  • 深圳建设网站费用app引流推广方法
  • 成都网站建设源码世纪海兴县建设工程招标信息网站
  • 用wp做网站备案第三方微信小程序开发工具
  • 兰州新站点seo代理重新配置wordpress
  • 做网站数据库要建什么表做商城网站建设哪家好
  • 网站开发及建设企业做网站须要注意些什么
  • 电子商务网站模板页面ui设计是学什么的
  • 公园网站建设浦江县建设局网站
  • 四川住房建设和城乡建设厅网站银川网站建设ctocio
  • 怎样建一个自己的网站小程序代理加盟前景
  • 网站做指向是什么意思罗湖区网站建设多少钱
  • 网站建设合同印花税税率wordpress视屏类型不受支持