Google Cloud Dataflow 删除带有“??”的重音符号和特殊字符
Google Cloud Dataflow removing accents and special chars with '??'
这将是一个很成问题的问题,因为在 it works in local
的情况下,我真的不知道应该给你哪个上下文或哪段代码!
这里的情况是我有几个服务,并且有一个步骤将消息放入 PubSub 主题中等待数据流使用者处理它们并保存为 .parquet 文件(我还有另一个发送那个负载到 HTTP 端点)。
事实是,在将消息发送到该 PubSub 主题之前,该服务中的消息似乎是正确的,Stackdriver 日志显示了所有应有的字符。
但是,当我要检查 .parquet 或 HTTP 端点中的最终输出时,我刚刚看到,例如 h??
而不是 hí
,这看起来很奇怪 运行 本地的所有内容都使输出正确。
我只能考虑在将数据流部署为作业时对服务器进行编码,而不是 运行 在本地进行编码。
希望有人能阐明这种抽象的东西。
奇怪的是它在本地工作。
但作为解决方法,首先想到的是使用编码。
您是否在某些时候使用函数将字符串输入转换为字节?
如果是,您可以尝试通过传递参数来强制 getBytes() 使用 utf-8 编码,如下例来自此 Whosebug thread:
byte[] bytes = string.getBytes("UTF-8");
// feed bytes to Base64
// get bytes from Base64
String string = new String(bytes, "UTF-8");
还有:
- 您是否尝试过设置 parquet.enable.dictionary 选项?
- 您的原始文件在转换前是用 utf-8 编写的吗?
Google Cloud Dataflow(至少是 Java SDK)将西班牙字符如“ñ”或重音符“á”、“é”等替换为符号�,因为默认字符集安装在服务工作者上的 JVM 的一部分是 US-ASCII。因此,如果在实例化字符串或其相关字节数组转换时未明确声明 UTF-8,则将使用平台默认编码。
这将是一个很成问题的问题,因为在 it works in local
的情况下,我真的不知道应该给你哪个上下文或哪段代码!
这里的情况是我有几个服务,并且有一个步骤将消息放入 PubSub 主题中等待数据流使用者处理它们并保存为 .parquet 文件(我还有另一个发送那个负载到 HTTP 端点)。
事实是,在将消息发送到该 PubSub 主题之前,该服务中的消息似乎是正确的,Stackdriver 日志显示了所有应有的字符。
但是,当我要检查 .parquet 或 HTTP 端点中的最终输出时,我刚刚看到,例如 h??
而不是 hí
,这看起来很奇怪 运行 本地的所有内容都使输出正确。
我只能考虑在将数据流部署为作业时对服务器进行编码,而不是 运行 在本地进行编码。
希望有人能阐明这种抽象的东西。
奇怪的是它在本地工作。 但作为解决方法,首先想到的是使用编码。
您是否在某些时候使用函数将字符串输入转换为字节?
如果是,您可以尝试通过传递参数来强制 getBytes() 使用 utf-8 编码,如下例来自此 Whosebug thread:
byte[] bytes = string.getBytes("UTF-8");
// feed bytes to Base64
// get bytes from Base64
String string = new String(bytes, "UTF-8");
还有:
- 您是否尝试过设置 parquet.enable.dictionary 选项?
- 您的原始文件在转换前是用 utf-8 编写的吗?
Google Cloud Dataflow(至少是 Java SDK)将西班牙字符如“ñ”或重音符“á”、“é”等替换为符号�,因为默认字符集安装在服务工作者上的 JVM 的一部分是 US-ASCII。因此,如果在实例化字符串或其相关字节数组转换时未明确声明 UTF-8,则将使用平台默认编码。