2026年1月

有一台群晖的 NAS ,16TB RAID1 和 8T Basic
日常比较依赖 Synology Drive 同步文件数据
年底会因为公事出国呆一年多,想带着一些数据一起走
把这个 NAS 搬过去不现实,所以打算年中组一台全闪的移动 NAS
也考虑过对拷的那种移动硬盘盒(两个 M2 的那种)
想问有没有什比较好的解决方案?

当然不限于这两个,前者也可以是 OpenCode ,后者也可以是 Github Copilot ,总之分别代表 AI Agent IDE 和 AI CLI 。
我是 Windows 客户端开发,日常工作用的是 WPF 和 Qt5 ,Qt 也有部分工作是在信创 Linux 上做的。目前的疑惑就是 CLI 感觉对我用处不大。无论是 WPF 还是 Qt5 都是那种很依赖 IDE 的开发框架,几乎不会出现需要开发者自己操作命令行的场景。然后另一方面之前用过免费的 Cursor 和 Github Copilot ,非常喜欢智能 Tab 的功能,这个是 CLI 不具备的,而且我也不知道去哪里找平价的替代……
另外我用了 Claude Code for VS Code 插件要好一点,你们不会觉得在终端里输入中午很别扭难受吗……

A:GitHub (私有)

B:GitHub (公开)

C:自建 Git 仓库

D:GitHub+自建仓库

自建 Git 也有一大堆选择( gitea 、gitlab 、...?),

仓库放哪儿(云服务器、NAS 、...?)

9 月被电信限速之后从朋友那边搞来了一条带公网 ip 的联通宽带,下行 1000m 上行 350m 貌似是商企宽带,近期发现 nas 传文件极慢后查询 ip 及遍历论坛后发现意思进入小黑屋?
ip:116.147.151.xxx 地址在江苏淮安
有的时候重新拨号会变成 122.192.198.xx 地址在江苏徐州
症状均为 http/https 直连 nas 下载文件不超过 500kb/s 且传输时远程桌面类软件丢包极其严重高达 70%+
微信等软件发送图片、视频极其卡顿
常用测速站点测速正常但寻找到小众站点会发现上传限速在 2-3 兆?(排除站点本身问题)
询问装维师傅表示在管控名单?商企客户经理表示不清楚解封流程...10010 的工单又会转移至客户经理死循环

Ruby on Rails 后端工程师(远程 )

职位概述

我们正在寻找一名 Ruby on Rails 工程师,参与实际业务系统的开发与维护。
你将以 远程办公 的形式加入项目,按实际工时结算薪资,合作方式灵活,适合自由职业者或希望长期远程合作的开发者。


工作内容

  • 使用 Ruby on Rails 进行 Web 后端功能开发与维护
  • 参与业务需求的技术实现,与产品/设计协作落地功能
  • 编写结构清晰、可维护的代码,并进行必要的调试与优化
  • 根据项目需要,参与 API 设计、数据库建模等工作
  • 通过文档、Issue 或英文技术资料理解并解决问题


任职要求

  • 熟悉 Ruby on Rails,具备实际项目开发经验

  • 掌握基本的 Web 开发知识( HTTP 、RESTful 、数据库等)

  • 熟悉常见数据库(如 PostgreSQL / MySQL )

  • 具备 基础英文读写能力

  • 能阅读英文技术文档、Issue 、报错信息

  • 能进行简单的英文技术沟通(不要求口语流利)

  • 具备良好的自我管理能力,能够适应远程协作

  • 对代码质量负责,有持续学习和改进的意识


加分项(非必须)

  • 有远程工作或自由职业经验
  • 熟悉 RSpec 、Sidekiq 、Redis 、API 设计等 Rails 常见生态
  • 有性能优化、系统重构经验
  • 熟悉 Git / GitHub 协作流程


合作方式 & 薪资

  • 工作方式:远程办公

  • 计薪方式:按工时结算

  • 薪资范围80 – 140 元人民币 / 小时

  • 具体根据技术水平、合作稳定性综合确定

  • 工时与任务透明,长期合作优先


我们能提供

  • 灵活、尊重专业的合作方式
  • 清晰的需求沟通,不无意义加班
  • 有技术挑战、能真正落地的项目
  • 长期合作机会(不是一次性外包)

如有意向,请投递简历至 [email protected]

场景是大学宿舍,WAN 口要连校园网用 shell 脚本登录。

对于网速不敏感,WLAN 下行能有百兆、以太网能有千兆就 OK 。

能刷开源系统最好。


题外话:

现在用的是 PVE 的小主机手动配置成软路由的方案,

但是自从某一次更新以后无线网卡 AX210 的驱动 iwlwifi 经常跑着跑着就挂了,

需要写脚本重新加载驱动、分配地址、重启 hostapd 。

虽然还是能用,但不方便 :(

议题分享:Vigor2960 Memoirs \nPursuit of the Elusive 0day & 1day

大家好!

我是 FortArcade.com 的站长。我想邀请大家来我的小站逛一逛,放松一下心情。我们专注于收集好玩、解压的网页游戏(无需下载,点开即玩)。

目前站内有一些非常热门的游戏,也许正是你喜欢的:

Slice Master: 强迫症福音,解压切切切!

Bloxd.io: 类似 Minecraft 的沙盒建造与对战。

Snake Arena: 经典贪吃蛇的现代大乱斗版。

Space Waves: 节奏感极强的波动闯关。

Shell Shockers: 硬核又可爱的“蛋蛋”射击游戏。

网站还在成长中,我知道它肯定还有很多不足。如果你在体验过程中有任何不爽的地方(比如加载慢、找不到游戏、或者希望增加某个特定游戏),请务必在评论区告诉我!

每一条建议对我来说都非常珍贵。希望能把这里建成大家最喜欢的游戏角落。

传送门 👉 FortArcade.com

感谢大家的支持!❤️

火线Zone是由火线安全平台打造的安全技术专家聚集和交流的社区,旨在推动数智时代的安全生态。

通过火线Zone内容社区、火线技术沙龙等形式,为技术专家提供最前沿的技术分享和交流。目前,火线Zone社区成员已超过20000人的规模,其中不乏来自腾讯、华为、Gitlab、绿盟、去哪儿等知名企业的CTO、CISO、安全VP、安全技术专家等,通过社群和活动讨论交流安全攻防、黑客溯源、企业安全管理、安全运营、软件应用安全、云计算安全等方向技术话题。

截止目前,火线Zone累计举办公开的技术交流活动27场(点击查看)、技术内容超过2000篇、10余个城市举办线下交流活动,全方位促进社区成员与企业之间的学习、交流与合作,为安全从业者提供全新思路,共同探讨行业未来发展之路。

在这里,我们重视每一位成员的声音!火线Zone现在诚挚邀请您加入我们的数智安全社区,分享自己经验,和大咖共探数智安全未来。

投稿须知

欢迎您向火线Zone投稿,分享您的知识和经验。为了确保您的稿件能够顺利通过审核并发表,请您仔细阅读以下投稿指南:
投稿文章内容方向包括并不仅限于以下方向:

  1. 应用安全:当年最新的漏洞分析、安全预警及最新的测试技巧,并具备广泛影响性。
  2. APP安全:针对APP、小程序的实战对抗、逆向分析、隐私合规等实战评估及测试方法论内容。
  3. AIOT安全:针对可穿戴设备、安防设备、智能家居、汽车、工业设备等硬件设备的逆向分析、漏洞挖掘的实战评估和测试方法论内容
  4. 黑客事件:针对DDOS、勒索病毒、APT攻击等实战黑客攻击的完整事件溯源分析以及威胁分析的方法论。
  5. 红队攻防:针对中大型企业的真实攻防案例,具备防御机制绕过、内网横向、公有云横向等环节内容
  6. 安全运营:针对基础安全、开发安全、办公网安全、安全托管运营等安全运营方向的实战落地内容
  7. 其他:前沿领域安全研究,如大模型安全、AI应用安全等

希望你的文章质量满足以下要求:

  1. 提供深入的分析和独到见解,揭示未公开的新内容。
  2. 全面总结某一领域知识,可作为参考手册。
  3. 确保内容已授权且完全脱敏,遵守法律法规,不涉及非法安全测试。
  4. 文章篇幅需要符合深度分析的篇幅要求,具体篇幅长度视内容类型审核

审核流程说明:

  1. 投稿后,若15天内未收到发表通知,您可自行决定是否向其他平台投稿。我们反对一稿多投,一经发现,将不予审核通过。
  2. 火线Zone不提供稿件退回服务,请作者自行备份原稿。
  3. 对于非原创、抄袭、洗稿或未遵守转载规则的稿件,我们将进行删除处理,并取消任何奖励,同时发布违规公告。

如何投稿

  1. 在线投稿
    (注:为方便查看稿件审阅进度,请优先选择在线投稿方式)
    进入火线Zone[https://zone.huoxian.cn/]>点击左上方【发布主题】-> 在文章开头添加#应用安全#等文章类型标签。
    文章稿件支持Markdown格式,文章发布后,社区管理员将对其进行审核并进行精华优选,请耐心等待审核。
    没有火线Zone账户的用户,可前往火线Zone注册申请加入。
  2. 邮件投稿
    您也可以将文章或稿件发送至zone@huoxian.cn
  3. 稿件疑问
    欢迎添加火线安全小助手,投稿问题可随时咨询。

投稿奖励

  1. 基础奖励:如果您未有火线安全平台认证邀请码,文章通过后你将获取到邀请码一枚,可以来注册成为火线白帽子参与平台漏洞悬赏项目。
  2. 基础奖励:文章如审核通过即可获普通文章奖励(50查克拉积分),可用于兑换火线安全商城的礼品
  3. 优秀奖励:文章内容符合社区征稿意向,内容充实有新意可获优秀文章奖励(50查克拉积分 + 500RMB)。
  4. 精华奖励:最新的事件分析和安全预警,分享业内前沿最新技术、 0day 分析与利用、个人安全开发研究新成果 等方面的奇技淫巧、心经等可获加精文章奖励((100查克拉 + 1000RMB)。
  5. 精华奖励:发布文章并获取精华标签后,可以直接加入渗透测试、APP安全、IOT安全、威胁情报、红蓝对抗等相关领域核心众测群,参与平台私密众测项目。
  6. 无奖励:内容深度较浅或网上有一定公开类似、单纯的工具介绍使用则不予奖励。

内容奖励要求:

  1. 基础奖励在内容符合要求的前提下,阅读量不做要求
  2. 优秀奖励在内容符合要求的前提下,阅读量当月突破500
  3. 精华奖励在内容符合要求的前提下,阅读量当月突破1000(内容质量较高不受此条件限制)

奖励将在每月第一周公示并发放至火线安全平台账户,可在火线安全平台申请提现。
PS:文章通过后请联系“火线小助手”加入火线Zone创作者群,与其他创作者一起思想碰撞!

转载说明

为了维护原创作者的权益,确保内容的合法传播,特制定以下转载规则。在您希望转载火线Zone社区的文章时,请务必遵守以下指南:

  1. 版权声明:在您的平台上转载文章时,请明确标注【原文来自火线Zone、原文作者以及原文链接】。
  2. 转载声明:请在文章的显著位置注明以下声明:“本文经火线Zone授权发布,转载请联系火线Zone社区。”
  3. 内容修改:您可以对文章标题和内容进行适度修改,以适应您的平台风格,但请确保不改变文章的核心观点和主旨。
  4. 公众号转载:若您希望在微信公众号上转载,请先通过火线Zone社区的官方渠道申请授权。获得授权后,请在文章开头注明公众号信息,并在文末附上转载声明。
  5. 责任归属:转载文章产生的任何版权纠纷,由转载方自行承担。请尊重知识产权,未经授权的转载行为将被视为侵权。
  6. 独家代理:如果您是文章的原创作者,并且希望火线Zone作为您作品的独家代理,请在投稿时声明,并确保作品未在其他平台发布。
  7. 版权保证:投稿者需保证拥有所投稿件的完整著作权,并授权火线Zone及其关联平台进行发布和传播。
    我们期待与您共同维护一个尊重原创、鼓励分享的社区环境。感谢您的理解和支持!

加入社群

火线Zone已经开启外部粉丝社区群和城市技术社群,大家可在群内进行技术交流,但严禁发表与技术无关的和讨论政治相关内容

添加“火线小助手”,并发送以下关键字加入社区
并发送“社区群”可以加入火线Zone社区技术群
发送“同城群”可以加入火线Zone城市分群

向WooYun Zone、Drops致敬

:)

大语言模型在文本生成和推理上的表现有目共睹,但对于从非结构化文本构建可靠知识图谱这件事,依然是个老大难。这个问题的根源在于:语言模型的运作机制与结构化知识提取的需求之间存在本质性的错位。

本文会介绍自动化知识图谱生成的核心难题:生成式模型为什么搞不定结构化提取,判别式方案能提供什么样的替代选择,生产级知识图谱的质量标准又是什么。

语言模型在知识图谱提取上栽跟头的原因

即使是当前最顶尖的模型,在结构化提取上也会翻车。这事儿不只是幻觉问题,而是语言模型生成文本的方式和知识图谱的需求之间存在根本性冲突。

生成式模型构建知识图谱时会有一连串的麻烦:实体消歧首当其冲,同一个实体换个说法出现,模型就可能认不出来,遗漏共指关系直接导致图谱碎片化;组合实体也很麻烦"墨西哥城"这种术语涉及嵌套概念(城市和国家),需要层级化表示;规模一大幻觉问题就压不住了,概率生成会编造出看着挺像那么回事但纯属虚构的实体和关系,在需要分段处理的长文本里这个问题尤其突出;还有上下文依赖,很多实体之间的关联只有看到完整文档才说得通,但把整个文档丢进去又会放大幻觉率。

吧i如说法律文档分析中,单个段落里模型把"甲方"识别成一个实体,转头又把"前述当事人"当成另一个实体——它们分明是同一个组织。这种段落级别的碎片化让生成的图谱噪声满满,导致后处理的工作量相当可观。

有人尝试切小文本块来压制幻觉,但是会出现关系丢失和实体重复。段落级别就已经有问题了——重要的实体关联可能跨越多个句子,激进地切到句子级别会把这些依赖关系彻底打碎。推理成本还会上去因为模型得跑好几遍才能处理完同样的内容。

上下文丢失随着窗口缩小而加剧。段落级别已经有麻烦,句子级别只会更糟

生成式架构的这些局限性引出一个问题:有没有更适合结构化提取的模型类型?

判别式模型 vs 生成式模型

判别式语言模型——基于掩码语言建模训练的双向注意力模型——在知识图谱提取上提供了一条不同的路径。

优势从何而来?判别式模型天生擅长 Token 和序列分类。命名实体识别可以直接建模为输入序列上的 Token 级分类任务,生成步骤压根不需要。

命名实体检测作为 Token 分类处理,根本不走生成流程

架构上的契合让判别式模型不仅在结构化提取上更准,效率也足够支撑边缘部署——一个 BERT 模型在普通硬件上就能跑,DeepSeek 可不行。

但是判别式模型需要在领域数据上做针对性微调,效果比生成式模型的用法强;生成式模型靠 Prompt 和少样本示例就能适应新任务,不用额外训练。

不管选那种方法成功的提取都得从扎实的基础开始。学术上管这个叫"断言知识图谱"(asserted knowledge graphs),它代表源文本的基准真值。需要迭代优化的时候,这个基础的价值就体现出来了。

断言知识图谱:可验证的基础

断言知识图谱只表示源文本里明确说了的东西——不做推理,不引入外部知识,有什么记什么。源就是文本本身,这个图谱就是该文档的可验证基准。

构建断言知识图谱涉及三个核心任务:实体识别负责找出人名、组织、日期、领域术语等关键片段并归类;关系提取要发现实体之间明确表达的连接;共指消解则是把指向同一实体的不同说法归并到一个节点上。

这些任务恰好落在判别式模型擅长的 Token 和序列分类范畴内,所以基于 BERT 的专用系统通常会分开处理它们。

但这种顺畅的流水线方法有个要命的问题:

这些任务通常串行执行:先提取实体,再检测关系,最后做共指消解。多阶段流水线的问题在于每一步都会积累误差。

实体识别 90% 准确率,关系提取 90% 准确率,乘起来只剩 81%,误差传播是现代方法转向端到端模型的直接原因

单个语言模型一次性生成完整图谱结构,可以规避链式专用模型的复合失败。哪怕每个专用组件在各自的子任务上表现更好,端到端方案的整体效果往往更优。

断言知识图谱是可验证的基线。下游任务需要额外信息,比如隐式关系、外部知识库连接、领域特定增强的时候,扩展是在可信基础上进行,不用质疑整个图谱的有效性。

生产系统里这一点至关重要。可解释性和调试都依赖于一个前提:知道哪些信息直接来自源文本,哪些来自推理或增强。

不过,光有这个可验证基础对很多实际应用来说还不够,还需要增强策略。

断言知识图谱的增强

断言知识图谱本身往往撑不起实际应用。从法律文档提取基准真相之后,反复碰到三个根本性限制:图谱里经常有孤立的实体簇,没有连接路径,遍历性很差;真实文档假设了一堆没明说的共享上下文,这部分隐式知识缺失严重;实体需要规范化到更广的知识库才能做下游集成,外部对齐需求绕不开。

这些缺口需要有针对性的增强策略来补。

下游任务经常能从一些易于自动生成的直观关系中获益,比如说"是一个"、"位于"、"属于"之类的词语。

层级关系的价值是非常大的,添加分类学连接可以把实体组织成本体论结构,比如建立 [雇佣合同, 是一个, 法律合同] 或 [甲方, 是一个, 公司],扁平的实体列表就变成了可导航的层级。

生成式语言模型在受限于预定义关系词汇表时可以胜任这种增强。放开限制的话幻觉风险会上升,而且模型容易退化成通用常识里那套标准层级关系丢失领域特异性。

基于规则的增强

逻辑规则是另一条路,从已有模式推断新事实,利用简单规则比如"如果实体 A 雇佣实体 B那么实体 A 是一个组织"可以把领域知识显式编码进去。

多跳规则能支撑更复杂的推理:"案件 A 违反了第 5 条,第 5 条属于法规 R,那么案件 A 也违反了法规 R。"链式推理可以大幅提升图谱连通性揭示隐式关系。

但是代价是基于规则的增强需要领域专家来定义有效的推理模式

规则不会泛化到专家编码之外的地方,但也不会编造出无效关系。正确性压倒一切的场景里这份可靠性非常靠谱的。

链接预测与知识库对齐

另外一种思路是在现有实体集里识别缺失关系,不加新节点就能提升图谱连通性。实现方式是在领域特定知识库上训练链接预测模型。

模型在 [实体 A — 关系 — 实体 B] 三元组上训练,学会判断任意两个实体之间是否存在关系,存在的话是什么类型

生成式语言模型也能通过 Prompt 预测缺失关系,不过幻觉风险更高,需要严格界定有效关系子集。

保留源上下文

还有一种增强方式是保留原始源结构。

创建代表文本片段的节点,句子、段落或整篇文档。实现方式有两种:把这些节点连接到相关实体上以提升整体连通性,或者构建嵌套层级,让高层文本节点包含从其内容中提取的子图

这种增强不会引入事实错误,因为表示的是源里实际存在的东西不是推断出来的新知识。

实体在多个上下文里出现时,来源节点能揭示单个实体连接里看不到的使用模式和语义关系。任何实体或关系都可以追溯到精确的源位置,不仅知道提取了什么还知道它来自哪里、出现在什么语境下。

更简单的实现可以在图谱构建期间直接在实体和关系节点上存源元数据(文档 ID、句子位置),省掉额外结构节点的开销。选择用元数据还是显式节点,取决于下游任务是否需要把文本片段本身当作可查询的图谱实体来处理。

主题聚类提升连通性

孤立组件对图谱遍历和全局查询始终是个问题,基于主题的聚类通过创建桥接节点来连接相关实体。

直接的做法是用预定义类别:在领域特定主题上训练分类模型(法律文档的话就是"劳动法"、"知识产权"、"合同纠纷"之类),然后创建主题节点,把每个类别下文档里的所有实体连起来。

这种方法可解释性好,对分类体系稳定的领域很适用

GraphRAG 这类更复杂的方案用层级社区检测算法在多个粒度上自动发现实体簇,计算开销会大一些。

用预定义分类还是自动发现,需要看领域是有成熟类别体系还是更适合新兴模式检测。

增强策略的选择

这里有一个最简单和直接的方案:用同一个生成式模型从基准真相图谱和原始文本中推断隐式实体和关系。

这种增强策略限定在预定义关系类型范围内,产生的知识图谱有效捕获了下游 GNN 分类任务所需的语义结构。

最优增强策略完全取决于下游应用。需要跨孤立组件做复杂推理的任务,聚类技术提供必要的连通性

分类或以实体为中心的任务,选择性推断隐式知识可能就够了。正确性优先于覆盖率的高风险领域,基于规则的方法保证可靠性。

增强前:

"甲方"(实体)

"雇佣合同"(实体)

添加分类学关系后:

"甲方" → [是一个] → "公司" → [是一个] → "法律实体"

"雇佣合同" → [是一个] → "法律合同" → [是一个] → "文档"

反复试下来会发现,最有效的方案往往不是直觉上那个:从断言基础开始,迭代增强,直到图谱能服务于预期目的。

总结

知识图谱提取的核心矛盾在于:语言模型擅长生成流畅文本,却不擅长输出结构化、一致、可验证的知识表示。理解这一点,才能做出正确的技术选型。

判别式模型在精度和效率上占优,但需要领域微调;生成式模型灵活性强,却要承担幻觉和碎片化的代价。两者并非非此即彼,关键是明确下游任务的需求。

断言知识图谱作为可验证基础的价值不可替代。在此之上叠加增强策略——分类学扩展、规则推理、链接预测、源上下文保留、主题聚类——根据应用场景组合使用,才能构建出真正可用的生产级知识图谱。

https://avoid.overfit.cn/post/767c139e559b44d0b467a925d5384841

作者:Fabio Yáñez Romero

前言

最近在做一个 Java 项目的时候,遇到了一个让人头疼的问题:在 Windows 上开发的时候,中文字符显示正常,但部署到 Linux 服务器上就变成乱码了。刚开始以为是数据库的问题,检查了数据库字符集也没问题。后来才发现,原来是不同系统的默认编码不一致导致的。

相信很多开发者都遇到过类似的问题:代码里写的中文,在不同环境下显示不一样;从数据库读取的数据,有时候是乱码;日志文件里的中文显示不正常。这些问题虽然看起来简单,但如果不了解字符编码的原理,可能会折腾很久。今天我们就来聊聊字符编码问题的原因和解决方案。

问题背景

字符编码问题是一个很常见但又容易被忽视的问题。不同的系统、不同的环境,默认的字符编码可能不一样,这就导致了各种乱码问题。

为什么会出现编码问题

现在的计算机系统,底层都是使用二进制来存储数据的。但我们在屏幕上看到的文字,比如中文、英文、日文等,都是字符。要把字符转换成二进制存储,就需要用到字符编码。

常见的字符编码:

  • ASCII:最早的字符编码,只能表示 128 个字符,主要是英文字母、数字和一些符号
  • GBK/GB2312:中文编码,Windows 系统默认使用
  • UTF-8:现在最流行的编码,可以表示世界上所有的字符,跨平台兼容性好

问题根源:

不同系统默认的字符编码不一样:

  • Windows 系统默认使用 GBK 或 GB2312
  • Linux 系统默认使用 UTF-8
  • Mac 系统默认使用 UTF-8

如果你的代码在 Windows 上开发(默认 GBK),但部署到 Linux 服务器上(默认 UTF-8),就可能出现乱码问题。

常见的乱码场景

在实际开发中,我们经常会遇到这些乱码场景:

场景一:文件读取乱码

从文件读取数据时,如果文件的编码和读取时使用的编码不一致,就会出现乱码。比如文件是 UTF-8 编码的,但用 GBK 编码去读取,中文就会变成乱码。

场景二:数据库存储乱码

数据库的字符集设置不对,或者连接数据库时没有指定正确的字符集,存储和读取的数据就可能出现乱码。

场景三:日志输出乱码

程序输出的日志,如果控制台的编码设置不对,或者日志文件的编码不对,中文日志就会显示成乱码。

场景四:网络传输乱码

不同系统之间通过网络传输数据时,如果编码不一致,接收到的数据可能就是乱码。

解决方案一:统一使用 UTF-8

解决字符编码问题最根本的方法,就是统一使用 UTF-8 编码。UTF-8 是目前最流行的字符编码,几乎所有的现代系统都支持,而且可以表示世界上所有的字符。

为什么选择 UTF-8

UTF-8 有很多优点:

  1. 兼容性好:几乎所有的系统、浏览器、数据库都支持 UTF-8
  2. 国际化支持:可以表示世界上所有的字符,包括中文、日文、韩文、阿拉伯文等
  3. 向后兼容:对于 ASCII 字符,UTF-8 编码和 ASCII 编码完全一样
  4. 变长编码:英文字符只占 1 个字节,中文字符占 3 个字节,比较节省空间

如何在项目中统一使用 UTF-8

代码文件编码:

确保所有的源代码文件都使用 UTF-8 编码保存。在 IDE 中,可以设置默认的文件编码:

  • IntelliJ IDEA:File → Settings → Editor → File Encodings,将 Project Encoding 和 Default encoding for properties files 都设置为 UTF-8
  • Eclipse:Window → Preferences → General → Workspace,将 Text file encoding 设置为 UTF-8
  • VS Code:在设置中搜索 "files.encoding",设置为 UTF-8

配置文件编码:

配置文件(如 properties、xml、json 等)也要使用 UTF-8 编码。特别是 properties 文件,如果包含中文,必须使用 UTF-8 编码,否则会出现乱码。

资源文件编码:

资源文件(如国际化文件、模板文件等)也要使用 UTF-8 编码。

解决方案二:设置 JVM 参数

在 Java 项目中,JVM 的默认字符编码可能会影响程序的运行。如果 JVM 的默认编码不是 UTF-8,可能会导致文件读写、网络传输等操作出现乱码。

设置 JVM 参数

在启动 Java 程序时,可以通过 JVM 参数来设置字符编码:

java -Dfile.encoding=UTF-8 -jar your-app.jar

这个参数会告诉 JVM,文件系统的默认编码是 UTF-8。

在 IDE 中设置

如果你在 IDE 中运行程序,也需要设置 JVM 参数:

IntelliJ IDEA:

  1. 点击 Run → Edit Configurations
  2. 选择你的运行配置
  3. 在 VM options 中输入:-Dfile.encoding=UTF-8
  4. 点击 Apply 和 OK

Eclipse:

  1. 右键项目 → Run As → Run Configurations
  2. 选择你的运行配置
  3. 在 Arguments 标签页的 VM arguments 中输入:-Dfile.encoding=UTF-8
  4. 点击 Apply 和 Run

在代码中设置

除了 JVM 参数,也可以在代码中设置系统属性:

System.setProperty("file.encoding", "UTF-8");

但这种方式不推荐,因为有些代码可能在设置之前就已经读取了系统属性。

验证编码设置

可以通过代码来验证当前的编码设置:

System.out.println("默认字符编码: " + System.getProperty("file.encoding"));
System.out.println("控制台编码: " + System.getProperty("console.encoding"));

如果输出不是 UTF-8,说明设置没有生效。

解决方案三:数据库字符集设置

数据库的字符集设置也很重要,如果数据库的字符集不对,存储和读取的数据就可能出现乱码。

MySQL 字符集设置

创建数据库时设置字符集:

CREATE DATABASE mydb 
DEFAULT CHARACTER SET utf8mb4 
DEFAULT COLLATE utf8mb4_unicode_ci;

utf8mb4 是 MySQL 中真正的 UTF-8 编码,可以存储所有的 Unicode 字符,包括 emoji 表情。而 MySQL 的 utf8 实际上只支持最多 3 字节的字符,不支持 emoji。

创建表时设置字符集:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改现有数据库字符集:

如果数据库已经创建,可以修改字符集:

ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

连接数据库时设置字符集

在连接数据库时,也要指定字符集:

JDBC 连接字符串:

String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false";

或者使用更完整的参数:

String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=UTC";

Spring Boot 配置:

application.propertiesapplication.yml 中配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8mb4&useSSL=false
spring.datasource.username=root
spring.datasource.password=password

或者:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8mb4&useSSL=false
    username: root
    password: password

其他数据库的字符集设置

PostgreSQL:

PostgreSQL 默认使用 UTF-8 编码,创建数据库时:

CREATE DATABASE mydb WITH ENCODING 'UTF8';

Oracle:

Oracle 数据库的字符集在创建数据库时设置,之后很难修改。建议在创建数据库时就选择 UTF-8 相关的字符集,如 AL32UTF8

实际应用场景

让我们看看几个实际应用场景,了解如何在实际项目中应用这些解决方案:

场景一:Web 应用开发

在 Web 应用中,需要处理前端的请求和响应:

设置请求和响应编码:

在 Spring MVC 中,可以配置字符编码过滤器:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);
        return filter;
    }
}

或者在 web.xml 中配置:

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

场景二:文件读写

在读写文件时,要明确指定编码:

读取文件:

// 使用 UTF-8 编码读取文件
try (BufferedReader reader = new BufferedReader(
        new InputStreamReader(new FileInputStream("file.txt"), StandardCharsets.UTF_8))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}

写入文件:

// 使用 UTF-8 编码写入文件
try (BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(new FileOutputStream("file.txt"), StandardCharsets.UTF_8))) {
    writer.write("中文内容");
}

场景三:日志输出

在输出日志时,要确保日志文件的编码正确:

Logback 配置:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>app.log</file>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
</configuration>

Log4j2 配置:

<Configuration>
    <Appenders>
        <File name="File" fileName="app.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" charset="UTF-8"/>
        </File>
    </Appenders>
</Configuration>

最佳实践建议

在实际项目中,为了避免字符编码问题,建议遵循以下最佳实践:

统一编码规范

  1. 所有代码文件使用 UTF-8 编码:包括 Java 源文件、配置文件、资源文件等
  2. 所有数据库使用 UTF-8 字符集:MySQL 使用 utf8mb4,PostgreSQL 使用 UTF8
  3. 所有网络传输使用 UTF-8 编码:HTTP 请求和响应、消息队列等
  4. 所有日志文件使用 UTF-8 编码:确保日志中的中文能正常显示

明确指定编码

在代码中,凡是涉及字符编码的地方,都要明确指定 UTF-8,不要依赖系统默认编码:

// 好的做法:明确指定编码
String content = new String(bytes, StandardCharsets.UTF_8);

// 不好的做法:依赖默认编码
String content = new String(bytes);  // 可能在不同环境下表现不一致

验证编码设置

在项目启动时,可以输出当前的编码设置,方便排查问题:

@PostConstruct
public void checkEncoding() {
    System.out.println("file.encoding: " + System.getProperty("file.encoding"));
    System.out.println("Default Charset: " + Charset.defaultCharset());
}

测试不同环境

在部署到不同环境之前,要测试字符编码是否正常:

  1. 在 Windows 开发环境测试
  2. 在 Linux 测试环境测试
  3. 在 Linux 生产环境测试

确保在所有环境下,中文字符都能正常显示。

总结

字符编码问题虽然看起来简单,但在实际项目中却经常遇到。解决这类问题的关键是统一使用 UTF-8 编码,并在所有可能涉及编码的地方明确指定。

关键点总结:

  1. 统一使用 UTF-8:所有文件、数据库、网络传输都使用 UTF-8 编码
  2. 设置 JVM 参数:通过 -Dfile.encoding=UTF-8 设置 JVM 默认编码
  3. 数据库字符集:数据库和表都使用 UTF-8 字符集,连接时也要指定字符集
  4. 明确指定编码:在代码中,凡是涉及编码的地方都要明确指定,不要依赖默认值
  5. 验证和测试:在不同环境下测试,确保编码设置正确

最佳实践:

  1. 项目开始时就统一编码规范
  2. 在 IDE 中设置默认编码为 UTF-8
  3. 在构建脚本中设置 JVM 参数
  4. 数据库创建时就使用 UTF-8 字符集
  5. 代码中明确指定编码,不要依赖默认值

realme 真我发布多款新品

1 月 22 日,realme 真我品牌发布多款新品,包含真我 Neo8 手机、真我 Buds Air8 耳机等。

其中,真我 Neo8 的产品定位为「潮玩电竞旗舰」。核心配置方面,真我 Neo8 搭载了第五代骁龙 8 SoC,采用第三代 Oryon 架构,搭配 Adreno GPU,跑分 358 万以上,CPU 能效提升 42%,GPU 能效提升 28%;配备 UFS 4.1 与 LPDDR5X,并采用「大气流冷锋散热系统」,整机散热总面积 39225mm²,包含 7000mm² VC 与石墨散热贴;搭载苍穹通信芯片 S1,针对高铁站、地下车库等场景优化,网络流畅度可以提升 15% 至 30%。

屏幕与续航方面,真我 Neo8 全球首发 165Hz 三星苍穹屏,拥有 3800Hz 的瞬时触控采样率与 360Hz 十指触控采样率,护眼部分包含全亮度 DC 调光与莱茵 TÜV 无频闪认证等;续航采用单层主板大电池方案,内置 8000mAh 电池;影像配置包含 5000 万像素潜望长焦等。

功能方面,真我 Neo8 提供 PC 掌机模式,PC 游戏可在手机本地运行,并支持与 PC 账号和存档互通,已验证 50 余款热门 PC 游戏可运行;同时加入 AI 大神辅助功能,覆盖开放世界、FPS、MOBA 等玩法。机身采用透明 RGB 设计与觉醒光环,配备 3D 超声波指纹,支持 IP66、IP68、IP69 防水,并搭载 realme UI 7.0。产品售价 2399 元起,国补到手价 2039.15 元起。来源

产品外观图,图片来自真我


索尼发布 LinkBuds Clip 开放式耳机

1 月 22 日,索尼公司推出隶属 LinkBuds 产品线家族的新成员 LinkBuds Clip,可选黑色、灰褐色、绿色、薰衣草色四种配色。

耳机主打轻量化,采用 C 形桥开放式设计,可通过固定在耳朵外侧来保证佩戴稳定性,适合长时间使用或跑步、通勤等场景,单耳续航约为 9 小时,配合充电盒总续航可提升至约 37 小时。

产品配备了「高精度语音拾取技术」及 AI 降噪系统,内置 10 级均衡器,预设了「标准音乐模式」「语音增强模式(可在嘈杂环境中清晰收听播客)」「防漏音模式(可在安静场所降低音量,避免打扰他人)」三种模式,可通过索尼 Sound Connect 应用程序调节音效;售价为1299 元 来源

产品外观图,图片来自新闻源


Adobe 将支持把 PDF 转换成播客

1 月 21 日,Adobe 公布了 Acrobat Studio 的最新版本。更新后的 Acrobat Studio 将深度整合 Adobe Express 与生成式 AI 技术,引入三大核心功能。

首先是基于 AI 分析功能,可以将将财务报告、产品页或竞品分析等多种文件导入 Acrobat 的 PDF Spaces(一种 AI 驱动的知识库),AI 助手便能自动分析内容并生成大纲,并调用 Adobe Express 的专业模板库,在几分钟内生成一份设计精美的演示文稿草稿。

其次是「生成播客」(Generate podcast)功能。支持将最长 500 页的报告、会议记录或复杂的电子邮件链导入系统,AI 助手会将其提炼为一段播客风格音频摘要。

最后是引入了基于聊天的自然语言编辑模式。用户只需在对话框中输入如「删除第三页」「添加电子签名」或「移除所有注释」等指令,AI 助手即可自动执行相应任务。来源


Xbox 应用正式登陆 Arm 版 PC

1 月 21 日,微软公司宣布,Xbox 应用正式支持所有基于 Arm 架构的 Windows 11 PC。

在内容与服务方面,玩家现在可以在 Arm 架构 Win11 PC 上,通过 Xbox PC 应用下载并游玩大量游戏。目前已有超过 85% 的 Game Pass 游戏可与 Arm 设备兼容。

微软表示,随着 Xbox 应用在 Windows 和 Xbox Insider 渠道上线并收集社区反馈,平台已进行多项更新以扩大兼容性。用于在 Arm 设备上运行 x86/x64 软件的 Prism 模拟器现已支持 AVX 和 AVX2 指令集,有助于更多现代游戏在 Arm 设备上运行。

此外,Epic Anti-Cheat(EAC)的支持也使《战争机器:重装版》《堡垒之夜》等热门游戏能够在 Arm 设备上运行。与此同时,Windows Performance Fit 功能可根据设备硬件能力,提示哪些游戏具备良好运行条件,帮助玩家更有信心地选择下载内容。来源


Marshall 推出音乐流媒体中枢 Heddon

1 月 22 日,Marshall 马歇尔品牌推出名为 Heddon 的音乐流媒体中枢,为现有蓝牙音箱补齐多房间同步播放能力。

与传统方案不同,马歇尔 Heddon 并不依赖 Wi-Fi 在音箱之间直接同步播放,而是采用 Auracast 技术作为核心传输方式。Heddon 先通过 Wi-Fi 接入 Spotify Connect、Tidal 等流媒体服务,或通过谷歌投放和 AirPlay 连接其它音源设备,再将音频以 Auracast 形式分发至 Acton III、Stanmore III 和 Woburn III 音箱。播放控制可通过马歇尔应用完成,同时 Heddon 还提供 RCA 接口,支持外接音箱或黑胶唱片。目前该设备定价 300 美元。来源

产品外观图,图片来自新闻源


Keychron 渴创推出 Q0 HE 数字小键盘

1 月 21 日,Keychron 渴创品牌宣布推出 Q0 HE 数字小键盘,这是其首款搭载磁轴的同类产品。

Keychron Q0 HE 延续了该品牌 Q HE 系列的特色,采用铝合金外壳机身,搭载佳达隆双轨磁轴(TMR),配备 OSA 高度 PBT 材质双色注塑工艺键帽,支持可调触发点、SOCD、单键多操作、Rapid Trigger 等高级输入功能。键盘采用 Double Gasket 固定结构,拥有四层吸声填充和铝合金定位板,PCB 支持轴体热插拔和南向 RGB 背光。此外其支持三模连接,USB-C 有线和 2.4GHz 无线均可实现 1000Hz 回报率,内置 56 小时续航 1800mAh 电池。售价为 139.99 美元。来源

产品外观图,图片来自新闻源


CHERRY 中国确认倒闭传闻不实

1 月 22 日,针对近期的破产或退出键盘市场传闻,CHERRY 中国发布「郑重声明」称,近期出现有关 CHERRY 业务调整的猜测与不实信息。公司表示,CHERRY 品牌在全球范围内持续运营,中国业务也在蓬勃发展。

声明中表示,去年集团部分业务调整属于跨国公司正常的战略优化,旨在聚焦核心优势业务。CHERRY 中国强调,中国市场对其具有战略意义,当前在华运营完全正常,并将持续加大投入,为中国消费者带来更新更好的产品,相关市场活动与合作推广也在有序推进。

此前有报道称,CHERRY 已停止在其德国奥尔巴赫(Auerbach)总部的机械轴体生产,并将所有产能转移至位于中国和斯洛伐克的合作伙伴工厂;德国总部未来将仅作为研发、物流和管理中心。CHERRY 方面同时计划出售旗下的「外设业务部」(负责键盘、鼠标及电竞产品)或「数字医疗部」中的一个,以换取资金维持运营。近期出现的「倒闭」传闻可能是以上新闻在传播中的误传。来源


看看就行的小道消息

  • 科技媒体 The Information 于 1 月 22 日发布博文,称 Apple 计划最快今年春季发布新款智能家居中枢(Home Hub),不仅配备了小型显示屏和高保真扬声器,更引入了具身智能(Embodied AI)的关键组件「机器人旋转底座」,让设备能够物理转动,改变传统智能音箱被动静止的交互模式。例如用户发出语音指令或移动后,底座驱动屏幕自动转向用户,不仅能提供更好的视频通话视角,还能通过物理动作模拟注视感,赋予 AI 助手一种「视觉人格」(Visual Personality),从而提升交互的沉浸感与自然度。发布日期方面,供应链消息指出,其上市时间窗口将与 iOS 26.4 的发布时间高度重合。硬件上的灵动转向配合软件上的更智能 Siri,苹果有望重新定义智能家居的控制中心。来源

少数派的近期动态

  • 我们正在优化并改进新的首页版式,如果你在使用过程中发现了任何问题或者有改进建议,请通过反馈表单告知我们。首页反馈收集
  • 将设计装进耳朵:少数派×飞傲联名 CD 机盖板设计大赛已经开始啦。了解详情
  • 比第三方 Apps 更好使:盘点 Apple 生态经典好用的原生应用。看看都有啥

你可能错过的好内容

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

    插希捷银河硬盘完全不通电,没声音,系统提示未检测到

    使用群晖原厂盘运行就没问题,所以排除了主板问题

    换了多块希捷都不行,排除了单盘是坏的可能性

    用胶带把希捷 3.3v 端子屏蔽掉也无法通电运行,排除了 3.3v 关机信号可能性

    实在是没办法了

    但同型号的盘朋友在 920 上运行就很正常

    openai 以及 claude 的 ai 内部脚本运行环境都是基于 node.js 运行时。codex 、claude code 等官方助手都是独家支持 npm 安装。
    和 ai 最好的连接语言就是 js 、ts 。

    以后各类设备底层都会内置 node.js 运行时,为了完成 ai 交互。

    这一个多月把 20w 左右的新能源车都试驾过了,目前留下两个选项,决赛圈希望各位 v 友给点建议,用车主要是广州这边南方,上下班通勤加偶尔的高速长途。

    1.极氪 7x 后驱 103 度
    2.理想 i6 后驱

    之所以没有其他的车型,是因为试驾完感觉都不喜欢,比如小鹏的 g 系列。

    顾虑/犹豫点

    1.理想 i6 车机体验感好,女朋友喜欢 i6 ,坐起来高级,舒服,安静,有副驾大屏幕。我开起来也挺舒服的。 提车速度慢太多,要选欣旺达,这个电池牌子可靠吗?空间大,送空悬还有电吸门,但是没有后排按摩。


    2.极氪 7x 开起来操作感十足,对于我油车车主切换有点不一样的体验,最近试了一下新的 nzp 感觉也 ok 。没空悬送,没电吸,选了电动门后门把手不能用,前备箱没理想大,有前后按摩。极氪售后口碑好像不怎么好?提车快,宁德时代电池。


    总结

    本来打算是在 25 年底购车,但是发生点不可抗拒因素要延期到 26 年中了,两个车子我都可以接受,价格也差不多。

    主要是不够预算,不然我两台都买了,开个玩笑。

    我希望两个车的车主 v 友们都来给我点建议,缺点优点都可以说,因为没有完美的车,只有最适合需求的车,缺点能容忍是没问题的。

    十分感谢各位 v 友,友好互助,保持对陌生人的友善。用知识去帮助别人。