sqlite - 尝试将带有破折号的 JSON 字符串从 Tcl 传递到浏览器,但无法解析?
问题描述
由于缺乏几个领域的知识,过去两天我一直在做这个简单的任务。所以,这听起来像是重复昨天的问题,但事实并非如此。
我遇到了将纯文本字符串存储在 SQLite 中的问题,该字符串包含由三个字节表示的 em dash 226 128 148
。我试图通过在文本编辑器中键入破折号来搜索字符串,但找不到它。
在 SO 的大量帮助下,我了解到纯文本可以轻松更改为 UTF-8;我这样做并更新了 SQLite 表列。如果运行,它现在显示为代码 8212 scan $c %c
。
现在,当从那里运行 SQLite 进行测试时,即使在命令行界面中也会显示破折号。
但是,由于以下错误,我无法再将记录发送到 Web 浏览器进行显示。SyntaxError: JSON.parse: bad control character in string literal at line 1 column 49 of the JSON data localhost:8000:233:25
当然,第 49 列是破折号。
如果我在将字符串从纯文本更新为 UTF-8 之前发回以前的版本,则浏览器中没有错误,并且字符串按预期显示。
可能,这是一个非常愚蠢的问题,但我不知道我做错了什么或没有做什么。感谢您提供的任何指导。
我使用 SQLite 函数更新了一条记录。
dbt function decodeUTF -argcount 1 -deterministic -directonly -returntype text { encoding convertfrom utf-8 }
set sql {select decodeUTF(text_content) from tablename where conditions...}
dbt eval $sql
然后检索新值并将其发送到使用一些 Tcl 代码作为非常有限的本地服务器的浏览器。
proc GetSQL {sock} {
chan flush $sock
set sql {select text_content from tablename where conditions ... }
dbt eval $sql {
set result "{\"result\":\"$text_content\"}"
}
set headers ""
append headers "HTTP/1.1 200 OK\n"
append headers "Content-Type: application/json; charset: utf-8\n"
append headers "Content-Length: [string length $result]\n"
append headers "Connection: Keep-Alive\n"
puts $sock $headers
chan configure $sock -translation binary
puts $sock $result
}
GET 请求是使用浏览器页面脚本中的 fetch 发出的return response.json()
,我认为它失败了。
解决方案
encoding convertfrom utf-8
when storage (your decodeUTF
) 需要与 on 检索匹配,然后通过您的仅二进制通道将其encoding convertto utf-8 $result
返回给客户端:
puts $sock [encoding convertto utf-8 $result]
推荐阅读
- r - R中GGplots的for循环中的数学符号
- python - 气流安装问题 SyntaxError:调用“打印”时缺少括号
- api - 如何使用自定义日期范围从 Bitly API 获取指标?
- sql - 动态存储过程和分页
- html - 突出显示滚动上的导航部分
- python - 如何使用 Pyside 检索 QSqlField 的值?
- asp.net-core - Azure 管道发布:错误:未找到具有指定模式的包
- java - 我应该在哪里检查用户名是否已经存在于rest api中?
- java - spring.jpa.hibernate.ddl-auto等于验证时Spring Boot 2.3无法启动
- javascript - 如何更新嵌套在firebase数组中的数组?