微信公众号文章发布技术规范

一、编码与格式规范

1. 文本编码要求

⚠️ 重要:禁止使用UTF-8编码直接上传文本

问题原因:
- 微信后台对UTF-8编码的中文处理可能出现乱码
- 部分特殊字符在UTF-8下显示异常
- 与微信内部编码格式不兼容

正确做法:
✓ 使用GBK或GB2312编码保存文本文件
✓ 或者直接使用微信编辑器粘贴纯文本
✓ 避免使用BOM头的UTF-8文件

编码转换示例:

# Linux/Mac 转换UTF-8到GBK
iconv -f UTF-8 -t GBK input.txt > output.txt

# Python转换
with open('input.txt', 'r', encoding='utf-8') as f:
    content = f.read()
with open('output.txt', 'w', encoding='gbk') as f:
    f.write(content)

2. 字体规范

⚠️ 汉字必须使用黑体或微软雅黑

/* 微信公众号推荐字体栈 */
font-family: 
  "PingFang SC",      /* 苹方 - iOS优先 */
  "Hiragino Sans GB", /* 冬青黑体 - Mac优先 */
  "Microsoft YaHei",  /* 微软雅黑 - Windows优先 */
  "WenQuanYi Micro Hei", /* 文泉驿 - Linux */
  "Noto Sans CJK SC", /* Google思源黑体 */
  sans-serif;

禁止使用的字体:

  • ❌ 宋体(在移动端显示效果差)
  • ❌ 楷体、仿宋(不够正式)
  • ❌ 艺术字体(可读性差)
  • ❌ 自定义WebFont(微信内置浏览器不支持)

3. 字体大小规范

元素字体大小字重行高
标题18-20pxbold1.4
正文15-16pxnormal1.6-1.8
小标题16-17pxbold1.5
注释/说明13-14pxnormal1.5
引用14-15pxnormal1.6

二、图片规范

1. 封面图

尺寸:900 x 383 像素(2.35:1比例)
格式:JPG 或 PNG
大小:不超过 2MB
建议:
- 主体内容居中偏上
- 避免底部放重要信息(被标题遮挡)
- 文字与背景对比度要高

2. 正文配图

宽度:900px(最佳)或 640px(最小)
格式:JPG(照片)、PNG(图标/截图)
大小:单张不超过 2MB
GIF:不超过 300KB,帧率不超过 15fps

3. 图片上传注意事项

⚠️ 禁止:
- 使用Base64编码的图片
- 直接粘贴Word中的图片
- 使用外链图片(可能被屏蔽)
- 图片文件名包含中文或特殊字符

✓ 正确做法:
- 先保存到本地再上传
- 使用英文或数字命名
- 压缩后再上传

三、内容格式规范

1. 段落格式

段落间距:1.5-2倍行距
段前/段后:8-12px
首行缩进:不建议(移动端显示效果差)
对齐方式:左对齐(避免两端对齐导致字间距不均)

2. 颜色规范

/* 推荐配色 */
主文字:#333333 或 #3f3f3f
次要文字:#666666 或 #888888
引用/注释:#999999
链接颜色:#576b95(微信蓝)
背景高亮:#f7f7f7 或 #fffbe5

/* 禁止使用 */
纯黑:#000000(刺眼)
亮红、亮绿等鲜艳色(不专业)

3. 特殊字符处理

⚠️ 需要转义或避免使用的字符:
- & 替换为 &
- < 替换为 &lt;
- > 替换为 &gt;
- 连续空格会被合并,使用 &nbsp; 或 text-indent
- 特殊引号 "" '' 替换为普通引号 ""
- emoji 适度使用,过多会导致加载慢

四、HTML标签白名单

1. 支持的标签

<!-- 基础排版 -->
<p>段落</p>
<br>换行

<!-- 标题 -->
<h1>-<h3>标题(建议只用h2、h3)

<!-- 文字样式 -->
<strong> / <b> 加粗
<em> / <i> 斜体
<span> 行内容器

<!-- 列表 -->
<ul> / <ol> / <li> 列表

<!-- 引用 -->
<blockquote> 引用块

<!-- 分割线 -->
<hr> 分割线

<!-- 链接 -->
<a href="">链接</a>

<!-- 图片 -->
<img src="" alt="">

<!-- 视频 -->
<iframe> 腾讯视频等
<video> 部分支持

2. 禁止使用的标签

<script> - 安全原因
❌ <style> - 会被过滤
❌ <link> - 外部样式
❌ <table> - 移动端显示问题
❌ <div> - 部分属性被过滤
❌ <form> / <input> - 交互元素
❌ <iframe>(非白名单域名)

五、API上传特殊要求

1. 素材上传编码

// 上传图文消息素材时
const formData = new FormData();

// 文本内容需要处理
const content = articleContent
  .replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f]/g, '') // 移除控制字符
  .replace(/[\ud800-\udfff]/g, ''); // 移除emoji代理对(如有需要)

// 构造请求
const requestData = {
  articles: [{
    title: title,
    content: content,
    // 其他字段...
  }]
};

// 必须使用JSON格式,不要添加BOM
const jsonStr = JSON.stringify(requestData);

2. 图片素材上传

// 上传永久素材
const formData = new FormData();
formData.append('media', fs.createReadStream(imagePath));
formData.append('description', JSON.stringify({
  title: '图片标题',
  introduction: '图片描述'
}));

// 注意:description字段本身需要是JSON字符串

3. Access Token刷新

// Token过期处理
const refreshToken = async () => {
  const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`;
  
  try {
    const response = await fetch(url);
    const data = await response.json();
    
    if (data.access_token) {
      // 缓存新token,设置过期时间(7200秒 - 缓冲时间)
      cache.set('access_token', data.access_token, 7000);
      return data.access_token;
    }
  } catch (error) {
    console.error('Token刷新失败:', error);
    throw error;
  }
};

六、错误码处理

常见错误及解决方案

错误码说明解决方案
40001access_token失效立即刷新token
40002不合法的凭证类型检查appid和secret
40004不合法的媒体文件类型检查文件格式
40005不合法的文件类型使用支持的格式
40006不合法的文件大小压缩文件至2MB以下
40007不合法的媒体文件idmedia_id已过期
40009不合法的图片文件大小压缩图片
44002POST数据为空检查请求体
45009接口调用频率限制降低调用频率
47001解析JSON错误检查JSON格式

七、最佳实践清单

发布前检查

  • 文本编码为GBK/GB2312(非UTF-8)
  • 字体设置为黑体/微软雅黑/苹方
  • 图片压缩至2MB以内
  • 图片文件名使用英文
  • 移除所有

性能优化

  • 图片使用CDN加速
  • 延迟加载非首屏图片
  • 控制单篇文章图片数量(建议不超过20张)
  • 使用图片懒加载技术
  • 定期清理过期素材

八、快速参考

标准文章模板

<!-- 标题 -->
<h2 style="font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; font-size: 18px; font-weight: bold; color: #333; line-height: 1.4;">
  文章标题
</h2>

<!-- 正文段落 -->
<p style="font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; font-size: 15px; color: #3f3f3f; line-height: 1.8; margin: 12px 0;">
  正文内容...
</p>

<!-- 小标题 -->
<h3 style="font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; font-size: 16px; font-weight: bold; color: #333; line-height: 1.5; margin-top: 20px;">
  小标题
</h3>

<!-- 引用 -->
<blockquote style="font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; font-size: 14px; color: #666; border-left: 3px solid #576b95; padding-left: 15px; margin: 15px 0; background: #f7f7f7; padding: 10px 15px;">
  引用内容...
</blockquote>

<!-- 图片 -->
<img src="图片URL" alt="图片描述" style="max-width: 100%; display: block; margin: 15px auto;">

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐