You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用.NET GetBytes方法仅转换有效字节且不生成问号?

解决方案

要实现仅保留Windows-1252编码支持的字符、直接过滤无效字符而非替换为问号的需求,关键是自定义编码的回退策略,将无法编码的字符直接忽略,而非使用默认的问号替换。

具体实现代码

# 创建自定义Windows-1252编码实例,设置无效字符回退为空字符串(即直接过滤)
$win1252Encoding = [System.Text.Encoding]::GetEncoding(
    1252,
    [System.Text.EncoderReplacementFallback]::new(""),  # 编码时忽略无效字符
    [System.Text.DecoderReplacementFallback]::new("")   # 解码时忽略无效字节(可选)
)

# 示例字符串
$originalString = "Helloäöü?→"

# 执行编码+解码流程
$bytes = $win1252Encoding.GetBytes($originalString)
$processedString = $win1252Encoding.GetString($bytes)

# 输出结果:Helloäöü?
$processedString

原理说明

  • 默认的Windows-1252编码遇到无法映射的Unicode字符时,会使用?作为替换字符(由EncoderReplacementFallback的默认行为决定)。
  • 通过创建空字符串的EncoderReplacementFallback实例,告诉编码器遇到无效字符时直接跳过,不生成任何字节,最终解码后自然不会出现问号。

内容的提问来源于stack exchange,提问作者maribox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:50:43