热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解析Google字体METADATA.pbgoogle.protobuf.message.DecodeError:解析消息时出错

我正在尝试从官方的Google字体存储库中解析一个METADATA.pb文件,该文件可在以下位置找到:

我正在尝试从官方的Google字体存储库中解析一个MetaDATA.pb文件,该文件可在以下位置找到:https://github.com/google/fonts(Roboto字体的示例MetaDATA.pb文件:https://github.com/google/fonts/blob/master/apache/roboto/METADATA.pb)>

要解析原始buf文件,需要正确的格式。可以在此处下载为“ public_fonts.proto”:https://github.com/googlefonts/gftools/blob/master/Lib/gftools/fonts_public.proto

我用它通过以下命令生成了一个名为“ fonts_public_pb2.py”的Python代码文件:

protoc -I=. --python_out=. fonts_public.proto

这是我的代码,该代码导入此生成的文件,读取MetaDATA.pb文件的内容(不管是哪个文件,它们都遵循相同的结构),然后尝试解析原始Buf字符串。 / p>

#! /usr/bin/env python
import fonts_public_pb2
protobuf_file_path = 'MetaDATA.pb'
protobuf_file = open(protobuf_file_path,'rb')
protobuf = protobuf_file.read()
font_family = fonts_public_pb2.FamilyProto()
font_family.ParseFromString(protobuf)

只有几行,没有什么太复杂的,但是输出始终是相同的:

Traceback (most recent call last):
File "parse.py",line 22,in
font_family.ParseFromString(protobuf)
google.protobuf.message.DecodeError: Error parsing message

我通常不使用Python编写代码,所以这里的问题很可能是我自己,但是尝试了一些不同的事情后,我不知道该怎么做了


  • 使用了gftools存储库中已生成的“ fonts_public_pb2.py”文件:https://github.com/googlefonts/gftools/blob/master/Lib/gftools/fonts_public_pb2.py-我从“ public_fonts.proto”文件生成的输出与此文件几乎相同,我检查了Meld。错误仍然相同

  • 将.proto文件中的所有“必需”字段设置为“可选”,再次生成“ fonts_public_pb2.py”文件-相同错误

  • 尝试过Python 2和3-相同的错误


那些METADATA.pb文件不是二进制protobuf文件,它们使用text format。

import fonts_public_pb2
from google.protobuf import text_format
protobuf_file_path = 'METADATA.pb'
protobuf_file = open(protobuf_file_path,'r')
protobuf = protobuf_file.read()
font_family = fonts_public_pb2.FamilyProto()
text_format.Merge(protobuf,font_family)
print(font_family)

推荐阅读
  • 构建Snowflake中的近实时数据摄取管道
    探索如何在Snowflake中构建高效的近实时数据摄取管道,利用其内外表特性及Snowpipe服务,实现数据的快速、稳定加载。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • 深入解析 TiDB Binlog:Pump Storage 实现详解(上)
    本文作者赵一霖,将继续探讨 TiDB Binlog 系统中 Pump Storage 的实现细节,包括其核心功能如持久化存储、数据排序及配对等。 ... [详细]
  • 深入探讨配置文件的管理与优化
    尽管配置文件的重要性不言而喻,但其管理和安全性问题却常被忽视。本文将详细讨论配置文件的不同管理策略及其优缺点。 ... [详细]
  • 本文介绍了如何在Java中使用`JCheckBoxMenuItem.setMnemonic()`方法,并提供了多个实际应用的代码示例。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • WCF类型共享的最佳实践
    在使用WCF服务时,经常会遇到同一个实体类型在不同服务中被生成为不同版本的问题。本文将介绍几种有效的类型共享方法,以解决这一常见问题。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文探讨了在QT框架中如何有效遍历文件内容,并解决了一个常见的错误,即文件内容读取为空时弹窗无法正常显示的问题。 ... [详细]
  • 本文通过SystemTap工具详细分析了lvextend命令在SUSE12sp3系统上的执行流程。首先介绍了必要的软件安装步骤,随后展示了如何编写并运行SystemTap脚本来追踪命令执行过程中的函数调用,最后结合实际输出结果对关键函数进行了深入分析。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • Java注解(Annotations)简介与应用
    自从Java SE 5.0引入了注解(Annotations)这一特性以来,它就成为了增强代码功能和可读性的重要工具。注解允许开发者在不改变程序逻辑的前提下,在源代码中添加额外的元数据信息。 ... [详细]
  • 本文详细介绍了Java库com.powsybl.afs.storage中的NodeGenericMetadata.getBooleans()方法,并提供了多个实际应用的代码示例。 ... [详细]
author-avatar
waxw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有