Google AppEngine - 如何为 Google AppEngine 设置默认字符集/文件编码(为 UTF-8)

2024-03-19

情况

我在用着AppEngine 云端点 (Java) https://cloud.google.com/appengine/docs/java/endpoints/作为我的 Android 应用程序的后端服务器。在 Cron-Job 中,服务器定期下载新数据(字符串),过滤出相关信息并通过 Firebase 云消息传递将其发送到不同的主题(通过将 HTTP 请求发布到https://fcm.googleapis.com/fcm/send https://fcm.googleapis.com/fcm/send).

(该死的简单)问题

下载的文本是德语,包含 ä、ö、ü、ß 和(不要用著名的 ? 代替这些字符)等字母我想将编码更改为UTF-8.

US-ASCII 编码是部署到 AppEngine 时的默认编码(为什么默认情况下不是 UTF-8...)。本地测试时,使用我电脑的默认编码,即UTF-8一切正常.

所以我想要的就是Charset.getDefaultCharset()回来UTF-8.
我该如何实现这一目标? 预先感谢所有帮助。

我尝试过的

  • 将其添加到 appengine-web.xml:

    <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables>

    在本地测试时,我得到了 In CorrectEnvironmentVariableException。部署时编码仍然是 ASCII。

  • 将其添加到<system-properties>-appengine-web.xml 中的标记:

    <property name="file.encoding" value="UTF-8" /> <property name="DEFAULT_ENCODING" value="UTF-8" />

    没有任何改变,不仅在部署时而且当我尝试使用它在本地开发服务器上将编码设置为 US-ASCII 时,仍然返回 UTF-8Charset.getDefaultCharset()

  • 甚至尝试使用反射:

    System.setProperty("file.encoding","UTF-8"); Field charset = Charset.class.getDeclaredField("defaultCharset"); charset.setAccessible(true); charset.set(null,null);

    (导致IllegalAccessException)

  • 尝试使用 HTTP-post 将编码设置为内容类型属性(不起作用):

    connection.setRequestProperty("Content-Type", application/json; charset=UTF-8);


简答

如果您遇到编码问题(即“?”)并且它seems就像更改默认字符集解决了问题然后你really要做的是找到使用默认字符集进行编码的代码并传递要使用的自定义字符集.

(就像 @AndreiVolgin 评论的那样:你永远不应该依赖系统默认字符集。)

更详细的解答

字符集指定如何将字符表示为数字(即字节)。 Java中所有字符串的内部字符集实际上都是UTF-16,所以自定义字符集唯一变得重要的时候是将字符串转换为字节数组时(String.getBytes()) 或相反亦然 (new String(byte[]).
如果您不传递像这样的字符集,则使用默认字符集String.getBytes(Charset) or new String(byte[], Charset).

当使用不同的字符集进行编码时,您会看到“?”(String.getBytes())和解码(new String(byte[]).

所以要摆脱'?'replace String.getBytes() by String.getBytes(Charset)(或者也许替换new String(byte[]) by new String(byte[], Charset)但不知道这是否是一件事)。


对我来说,通过互联网发送一些文本时出现编码问题,因为字符串需要转换为byte[]使用发送它HttpURLConnection.getOutputStream().write(byte[]).

准确地说:在课堂上com.google.android.gcm.server.Sender, 方法post(java.lang.String, java.lang.String, java.lang.String),第 471 行是byte[] bytes = body.getBytes();.

我将其更改为(覆盖它)byte[] bytes = body.getBytes("UTF-8");- 为我解决了。

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

Google AppEngine - 如何为 Google AppEngine 设置默认字符集/文件编码(为 UTF-8) 的相关文章

随机推荐

  • Jupyter 和 Common Lisp

    我正在尝试安装cl jupyter https github com fredokun cl jupyter common lisp 内核Jupyter http jupyter org 我无法让它工作 当我打开一个新的 lisp 笔记本
  • 如何将文本框中的日期插入数据库

    请帮助我将日期从文本框中以 dd mm yyyy 格式插入到 SQL Server 我的代码如下 int prio Convert ToInt32 Priority Text string stdate planstart Text str
  • 解析装饰器中的 args 和 kwargs

    我有一个需要 args 和 kwargs 的函数 我需要根据 args 和 kwargs 的值在我的装饰器中做一些事情2nd函数中的arg 如下面的代码所示 def workaround func def decorator fn def
  • 从 UWP 应用检查转储文件

    首先 我在 Windows 10 手机上启用转储文件的保存 设置 gt 更新和安全 gt 对于开发人员 gt 保存这么多故障转储 3 然后我调试了一个引发异常的应用程序 我停止后继续调试 断开并再次连接手机后 我能够访问存储在下的转储文件W
  • ASP.Net MVC 中静态文件的永久重定向旧路由

    我们旧的 ASP net 站点将静态图像存储在根目录的子目录中 名为 images 我们新的 ASP net MVC 站点将这些图像存储在新的布局中 内容 图片 我已经更改了网站中的所有页面以适应新的文件夹结构 但我想设置从旧静态图像到新位
  • 为什么表格比 CSS 更糟糕? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP MYSQL 关联数组和表

    这是一个代码 这会从数据库动态加载所有标题部分 即表的标题 下面的代码工作正常 但该列不匹配 即标题的第一行第一列是空白的并且表格中存在错位 Code table border 1 th th table
  • 如何在特定时间和日期运行函数?

    如何在给定时间和日期运行函数 示例 我有一个函数需要在每月 12 日上午 10 点运行 如果这很重要 此页面将 24 7 运行 显然我必须与当前日期进行比较 但我不确定如何检查当前日期和时间是否匹配 Shannon 不建议使用setInte
  • 计算大负值的指数

    我想知道R中如何得到大负数的指数 例如 当我尝试时 gt exp 6400 1 0 gt exp 1200 1 0 gt exp 2000 1 0 但我需要上面表达式的值 即使它很小 我怎样才能在R中得到它 这些数字太小了 要了解您的计算机
  • 列表视图中空白区域的上下文菜单

    我有一个简单的 LinearLayout 里面有 ListView match parent宽度和高度 我需要一个上下文菜单 以便在长时间触摸列表视图中的任何位置时显示 首先 我打电话registerForContextMenu对于列表视图
  • AVPlayer 是否支持在单独的文本文件中提供隐藏式字幕?

    我的团队开发使用 AVPlayer 播放视频的 iOS 应用程序 最近我们被告知 必须允许显示所有视频的隐藏式字幕 但隐藏式字幕不会作为视频文件中的轨道出现 我们已经支持以这种方式出现的隐藏式字幕 相反 我们会将它们作为单独的文本文件获取
  • 与SSE性能相同

    我对以下循环进行了矢量化 该循环出现在我正在开发的应用程序中 void vecScl Node A Node B long val int fact round dot const for i 0 i
  • Symfony 命令中的 RenderView 用法

    如何在 symfony 命令内 而不是在控制器内 使用 this gt renderView 我对 renderView 功能很陌生 但是我必须设置什么才能在命令中使用它 预先感谢您的问候 您的命令类必须扩展ContainerAwareCo
  • 如何在 MySql 的 SQL 查询中将行折叠成逗号分隔的列表

    在 T SQL 中 将相关值连接到 SQL 查询中的逗号分隔字符串中相对简单 请参见此处 将 SELECT 的行折叠成字符串的最佳方法是什么 https stackoverflow com questions 822615 what is
  • 将目录中的所有 csv 文件导入为 pandas dfs 并将其命名为 csv 文件名

    我正在尝试编写一个脚本 将目录中的所有 csv 文件作为数据帧导入到我的工作区 每个数据帧应命名为 csv 文件 减去扩展名 csv 这是我到目前为止所拥有的 但很难理解如何为循环中的数据帧分配正确的名称 我看过建议使用的帖子exec 但这
  • 我可以使用 git-svn 并看起来像我在使用 SVN 吗?如果是的话,如何?

    我习惯了 git 并且非常喜欢它 但是我的一个客户 仍然 使用 subversion 我现在不太了解 svn 但我知道有一个 git svn 包 我知道可以使用 git 从 svn 获取存储库 但是我可以使用 git 而不是 svn 并仍然
  • 如何查看 PKCS 7 文件中签署了哪些属性?

    我有一个PKCS 7 https en wikipedia org wiki PKCS 7文件 其中包含签名数据 它成功验证 openssl smime verify in data p7s CAfile root certificate
  • 如何使用 .net 4 api 端点从 Request.Content 对象获取原始请求正文

    我正在尝试捕获原始请求数据以进行问责 并希望从 Request 对象中提取请求正文内容 我见过执行 Request InputStream 的建议 但此方法在 Request 对象上不可用 知道如何获取 Request Content 正文
  • 以最低权限运行 Heroku Postgres

    我可以通过 Web 应用程序连接到 Heroku Postgres 数据库而不会有删除表的风险吗 我正在为第三方构建一个 Heroku 应用程序 该应用程序使用 Heroku Postgres 作为后端 第三方对安全性非常敏感 因此我正在考
  • Google AppEngine - 如何为 Google AppEngine 设置默认字符集/文件编码(为 UTF-8)

    情况 我在用着AppEngine 云端点 Java https cloud google com appengine docs java endpoints 作为我的 Android 应用程序的后端服务器 在 Cron Job 中 服务器定