`
tomEnjoy
  • 浏览: 145801 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

字符转义问题(备忘)

    博客分类:
  • java
阅读更多
由于定java和delphi之间一个小的传输协议的问题,想利用JSON格式的字符串形式(字节流)进行数据封装。但突然想到字符转义的问题,在脑子里绕啊绕,结果把自己绕进去了,看了个电影,回头想,忽然豁然开朗,还是记在这里免得哪天又把自己绕进去了。

本身字符串遇到",',\还有几个控制字符都会进行转义。这些不需要我们额外考虑。所以如果我们所要传送的某项数据是字符串类型的话,例如:field项是字符串,实际内容是a"b\c,那么我们要传送的JSON格式的字符串应该是:{"field":"a\"b\\c"},这样完全正确。JSONObject的getString和get方法都能获得正确的结果。

而当时开始考虑转义问题的时候是写了几行测试代码,我是这样写的:
String str = "{field:'a\"b\\c'}";结果怎么也不是输出我们想要的结果。哈哈,其实是这样写,String首先解码一遍这个字符串,得到的实际内容是:{field:'a"b\c'},而这个字符串在传入JSONObject构造子过程中自然而然由JSONObject再翻译了一遍,JSONObject按照这个字符串应该是生成了这样的结构:{"field":"a\"bc"}(\由于转义失败而被忽略)。那么这样jsonObj.getString("field")回来的数据当然成了a"bc了。

呵呵,所以呢,其实在测试的那几行代码时,要是手写字符串而不是从别的途径获取的话,应该这样写了:String str = "{\"field\":\"a\\\"b\\\\c\"}" ,这样字符串的实际内容才是{"field":"a\*b\\c"},通过jsonObj.getString("field")也获得了预期的结果。

总之,把你的格式中的字符串的标志双引号作为起点,字符串中出现的特殊字符进行转义就可以了
分享到:
评论

相关推荐

    C#正则表达式整理备忘

    在C#中,`@`符号用于创建逐字字符串字面量,这意味着字符串中的反斜杠`\`不会被视为转义字符。例如,`"D:\\My Huang\\My Doc"`和`@"D:\My Huang\My Doc"`是等价的,因为`@`使得反斜杠被解释为普通字符,而不是转义...

    给开发者的终极XSS防护备忘录

    **脚本变量中的字符串转义示例**:如果数据被嵌入到JavaScript代码中,需要进行适当的转义以防止代码执行。 ```javascript var msg = '<script>alert("XSS");</script>'; // 不正确的处理方式 document.write(msg); ...

    C#正则表达式整理备忘.doc

    这表示字符串中的反斜杠 `\` 不会被视为转义字符,而是直接解释为文本。例如,`@"D:\My Huang\My Doc"` 可以正确地包含路径,而无需额外的转义。 2. **基本的语法字符** - `\d` 匹配0-9的数字。 - `\D` 匹配非...

    c#正则表达式备忘

    - `\`:用于转义特殊字符,使其被当作普通字符对待。 - `\n`:匹配换行符。 - `\r`:匹配回车符。 - `\t`:匹配水平制表符。 - `\v`:匹配垂直制表符。 - `\f`:匹配换页符。 - `\nnn`:匹配一个8进制ASCII码...

    Tcl常用命令备忘录(拾陆楼).pdf

    反斜杠`\`用于转义特殊字符,确保它们在字符串中按原样输出,例如转义引号`\"`。 接着,我们来看一下Tcl中的特殊字符。换行符`\n`和`\r`分别表示换行和回车,用于控制文本输出的布局。转义字符`\`用于使特殊字符...

    C++基础知识markdown文件,适用初学者备忘复习

    在C++中,转义字符用于表示特殊含义的字符,这些字符通常以反斜杠(\)开头。掌握这些转义字符对于编写正确的程序至关重要。 - **换行符`\n`**:在输出时用于换行。 - **双引号`\\"`**:当需要在字符串中插入双引号时...

    前端大厂最新面试题-seconds.docx

    32. escapeRegExp:转义要在正则表达式中使用的字符串。 33. normalizeLineEndings:规范化字符串中的行尾。 34. removeAccents:从字符串中删除重音。 35. splitLines:将多行字符串拆分为行数组。 36. mask:用...

    C#中符号的作用备忘

    ### C#中符号的作用备忘 #### 按位求补符 `~` 在C#中,`~` 符号被用作按位求补运算符。这意味着它会将一个整数中的每一位二进制数进行反转:1 变为 0,0 变为 1。例如,如果有一个整数 5(二进制表示为 0101),...

    Python_OWASP备忘单系列的创建是为了提供关于特定应用程序安全主题的高价值信息的简明集合.zip

    Python OWASP备忘单系列是针对Python编程语言中与应用程序安全性相关的关键问题的详细资源集合。OWASP(开放式网络应用安全项目)是一个全球性的非营利组织,致力于提高软件安全意识和实践。它提供了各种安全相关的...

    regular-expressions-cheat-sheet-v2.pdf

    - **转义字符** (`\`):用于转义特殊字符,如 `\n`、`\r` 等。 - **控制字符**:如 `\a` 表示警报声,`\b` 表示退格等。 - **字符类**: - `\c`:控制字符。 - `\s`:空白字符。 - `\S`:非空白字符。 - `\d`:...

    Python 3 Cheat Sheet(忘了Python关键语句?这份备忘录拯救你的记忆)

    Python中的字符串支持各种转义字符,用于表示特殊字符或格式化输出: - `\n`: 新行(newline) - `\t`: 制表符(tab) - `\"` 和 `\'`: 分别表示双引号和单引号 - `\\`: 表示反斜杠本身 例如: ```python text = ...

    python-basic

    - 字符串操作,包括基本概念、字符转义、字符串连接以及字符串与变量之间的关系。 - 列表和字典,作为Python中最常用的两种数据结构,它们在数据处理中扮演着重要角色。 - 控制结构,例如if语句、循环结构等,是程序...

    零基础学Python[老齐].pdf

    书中的“积小流,至江海”部分,还会有字符串操作的详细介绍,包括字符转义、字符串连接、变量与字符串的关系等。字符串是编程中的基础,对于Python来说尤其重要,因为Python中很多数据都可以用字符串表示,操作字符...

    SQL-Injection-cheat-sheet:利用和学习SQL注入的备忘单

    - **字符转义**:使用反斜杠(\)对特殊字符进行转义。 - **注释注入**:利用SQL注释符号(-- 或 /* */)来终止正常查询并添加恶意代码。 - **UNION查询**:合并两个或更多SELECT语句,以显示不同列的数据。 - **...

    备忘单

    - **转义字符**:`\`用来取消特殊字符的特殊含义,例如`\*`表示星号本身。 2. **Shell命令** - **目录操作**:`cd`改变当前工作目录,`pwd`显示当前目录,`ls`列出目录内容,`mkdir`创建目录,`rmdir`或`rm -r`...

Global site tag (gtag.js) - Google Analytics