Google App Engine TextProperty 和 UTF-8:何时编码/解码

2024-03-14

我使用的是带有 Django 模板和 Webapp 框架的 Google App Engine 2.5。

db.TextProperty、UTF-8、Unicode 和解码/编码让我很困惑。我非常感谢一些专家可以提供一些建议。我用谷歌搜索了一整晚,仍然有很多问题。

我正在尝试做的事情:

[utf-8 form input] => [Python, Store in db.TextProperty] => [When Needed, Replace Japanese with English] => [HTML, UTF-8]

根据这个答案在 Python 中将 unicode 字符串压缩在一起 https://stackoverflow.com/questions/10650004/zipping-together-unicode-strings-in-python/10650469#10650469

# -*- coding: utf-8 -*-

以及所有以 utf-8 格式保存的 .py 文件

这是我的代码:

#Model.py
class MyModel(db.Model):
  content = db.TextProperty()

#Main.py
def post(self):
    content=cgi.escape(self.request.get('content'))
    #what is the type of content? Unicode? Str? or Other?
    obj = MyModel(content=content)
    #obj = MyModel(content=unicode(content))
    #obj = MyModel(content=unicode(content,'utf-8'))
    #which one is the best?
    obj.put()

#Replace one Japanese word with English word in the content
content=obj.content
#what is the type of content here? db.Text? Unicode? Str? or Other?
#content=unicode(obj.content, 'utf-8') #Is this necessary?
content=content.replace(u'ひと',u'hito')

#Output to HTML
self.response.out.write(template.render(path, {'content':content})
#self.response.out.write(template.render(path, {'content':content.encode('utf-8')})

希望一些Google App Engine工程师能够看到这个问题并提供一些帮助。多谢!


First, 读这个 http://www.joelonsoftware.com/articles/Unicode.html. And this http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python.

简而言之,每当您在应用程序中处理文本字符串时,它都应该是 unicode 字符串。当您想要以字节形式发送数据时(例如通过 HTTP),您应该编码为字节字符串(“str”而不是“unicode”的实例),并且当您收到表示文本的字节时,您应该从字节字符串进行解码(而且你知道它们的编码)。您应该对包含编码文本的字节字符串执行的唯一操作是对它们进行解码或编码。

幸运的是,大多数框架都能做到这一点。例如,webapp 和 webapp2(我可以看到您正在使用 webapp)应该从所有请求方法返回 unicode 字符串,并对您传递给它们的任何字符串进行适当的编码。确保您负责的所有字符串都是 unicode,这样应该没问题。

请注意,字节字符串可以存储任何类型的数据 - 编码文本、可执行文件、图像、随机字节、加密数据等。如果没有元数据,例如知道它是文本以及它采用什么编码,那么除了存储和检索它之外,您无法明智地使用它做任何事情。

永远不要尝试解码 unicode 字符串或编码字节字符串;它不会做你所期望的事情,事情会变得非常糟糕。

关于数据存储,db.Text是一个子类unicode;出于所有意图和目的is一个 unicode 字符串 - 它只是不同,因此数据存储区可以告诉它不应该被索引。同样地,db.Blob是一个子类str,用于存储字节字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google App Engine TextProperty 和 UTF-8:何时编码/解码 的相关文章

随机推荐

  • 为什么定义函数之前需要使用分号? [复制]

    这个问题在这里已经有答案了 我见过一些奇怪的 在一些 jQuery 插件源代码的函数开头 如下所示 function 有人可以解释为什么他们需要使用 在这种情况下 当文件中当前存在的代码不包含新代码时 此分号将帮助您正确地将新代码连接到文件
  • 长按后移动事件

    在我的 GestureDetector 中调用长按后 如何监听移动事件 当用户长按时 他启动选择模式 并且可以将一个正方形拖到屏幕中 但我注意到 在使用 LongPress 后 不会调用 onScroll 尝试解决这个问题一段时间 目前的解
  • 序言排列函数

    我是 Prolog 的新手 我知道排列的递归函数 即 per per L X P del X L L1 per L1 P 我想知道当我们收到时这个函数在最后一次迭代中的逻辑树per 它返回哪个元素 Sonia 您还没有给我们 del 谓词
  • .NET 异常类型的 _xcode 字段是什么?

    在我的单元测试中 我需要对两个对象执行深度相等测试 这两个对象应该是相同的 在测试过程中 我发现系统类型中一些有趣的字段破坏了我的代码 Exception xcode是最新的 以下是有关该领域的一些事实 它被初始化为 532459699在所
  • `__CPROVER_fence()` 参数

    我看到类似的代码 CPROVER fence RRfence RWfence 正在像这样的项目中使用Linux RCU 测试 https git kernel org pub scm linux kernel git torvalds li
  • 内存中集成测试和环境变量——.net core

    我们可以执行一个测试服务器来进行集成测试 就像是 这个问题 https stackoverflow com questions 29968788 how do i run in memory integration tests using
  • Flutter返回首页

    我制作了一个应用程序 其中包含相当多的路由 可以相互推送多个全屏对话框 但我想从一个对话框中关闭所有对话框并返回主页 我怎样才能做到这一点 我不想再次推送主页 因为这样我的导航历史记录中仍然有所有这些对话框 是pushReplacement
  • 低级控制台输入和重定向

    我正在尝试将命令发送到a的输入cmd exe使用低级读 写控制台功能的应用程序 我使用以下命令阅读文本 抓取 没有任何问题ReadConsole and WriteConsole 连接到进程控制台后的功能 但我还没有弄清楚如何编写 dir
  • java google Drive api V3 分段和可断点上传

    我需要帮助编写大文件 gt 5MB 的分段和可恢复上传 到目前为止 我只能启动分段上传 但我不知道当用户暂停或网络故障时如何恢复它 我所说的 恢复 是指我不知道如何 1 获取已上传到驱动器的总字节数 2 如何在 Content Range
  • Chrome 和 Firefox 中的 CSS 网格行为不同[重复]

    这个问题在这里已经有答案了 我有一个 2 列 3 行的 CSS 网格 由于有角度的 ngif 子句 第三行内容并不总是存在 图像出现在跨越 3 行的第一列中 话虽如此 我在 Chrome 80 0 3987 87 这是我发布的最新稳定版本
  • 设置 DataGridView 单元格值并添加新行

    我有一个包含两列的 DataGridView 单击第一列中的单元格时 会显示一个 OpenFileDialog 当我选择一个文件时 第二列中的单元格值将设置为所选文件名 这是代码 private void dataGridView1 Cel
  • 如何实现 MVC 4 Web App 服务器端互斥体

    我不是 MVC 专家 但我相当确定这是可以实现的 但是 我不知道如何在 MVC 4 中做到这一点 为了进行测试 我使用了使用 VS 2012 创建网站时提供的默认 Web 应用程序 为简单起见 请考虑多个用户 例如 3 在同一时间点击 Ho
  • 如何使用 Azure CLI 按对象 ID 获取 Azure AD 对象

    在 Azure 门户中 可以根据对象 ID 查找 Azure AD 对象 如下所示 是否可以使用 Azure CLI 通过对象 ID 检索 Azure AD 对象 为了使用Azure CLI获取与对象ID相关的对象 看来我需要提前知道相关资
  • MVC 我的网址正在创建“?Length=4”

    我正在创建一个 MVC4 应用程序 我有一个小问题 我的代码是 li Html ActionLink Contract Contract Home new id lnk contract li 我正在获取网址 http localhost
  • Access SQL 查询:获取按日期查找的上一条记录的特定字段

    我对 Access 数据库非常陌生 我正在尝试为拥有多个加油站的天然气分销公司创建库存数据库 每个站都有更多产品 气体类型的库存 加油站报告其库存 包括 交易日期 售出加仑数 加仑交付 实际加仑库存 预订库存 ActualGallonsIn
  • 如何配置构建类型与产品风格?

    基于这个答案https stackoverflow com a 27908019 5156317 https stackoverflow com a 27908019 5156317我有一个后续问题 是什么让代表产品风味的应用程序与众不同
  • 我想用 C# 在堆栈上分配一个对象

    假设我有这个 C 类 public class HttpContextEx public HttpContext context null public HttpRequest req null public HttpResponse re
  • doesNotExist at /en-us/ 模板标记无法找到带有查找参数 `{'reverse_id': u'home', 'site': 1} ` 的页面

    我目前正在查看 django cms demo 我一直在使用这里找到的代码 https github com andrewschoen django cms demo tree master demo https github com an
  • Oracle 中的视图是什么?

    Oracle 中的视图是什么 A 在 Oracle 中查看在其他数据库系统中 它只是存储在内存中的 SQL 语句的表示形式 以便可以轻松地重复使用 例如 如果我们经常发出以下查询 SELECT customerid customername
  • Google App Engine TextProperty 和 UTF-8:何时编码/解码

    我使用的是带有 Django 模板和 Webapp 框架的 Google App Engine 2 5 db TextProperty UTF 8 Unicode 和解码 编码让我很困惑 我非常感谢一些专家可以提供一些建议 我用谷歌搜索了一