MoreRSS

site iconSunZhongWei | 孙仲维 修改

博客名「大象笔记」,全干程序员一名,曾在金山,DNSPod,腾讯云,常驻烟台。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

SunZhongWei | 孙仲维 的 RSS 预览

欧盟的双反关税是什么意思

2026-10-25 17:53:41

最近看到公司的产品被欧盟征收了双反关税,有点看不懂,不理解为何现在的新闻连概念都不解释,全是暗语。于是查询了一下

什么是双反

欧盟的“双反”关税,是反倾销税(Anti-Dumping Duty)与反补贴税(Countervailing Duty)的合称。这是欧盟为保护本土产业,针对外国出口商的不公平贸易行为而设置的两种核心贸易救济工具。当欧盟认定某种进口产品同时存在“倾销”和“接受补贴”两种情形,并对欧盟产业造成损害时,就可能“双管齐下”,同时征收这两种附加税。

反倾销税:针对“卖得太便宜”

反倾销税的核心,是抵消出口商以低于“正常价值”的价格在欧盟销售产品所带来的不公平价格优势。

“正常价值”通常是该产品在出口国国内市场的销售价格,或基于生产成本推算出的价格。如果出口价格低于这个正常价值,就构成了“倾销”。征收的反倾销税额,通常相当于这个价格差额(倾销幅度)。其逻辑在于,这种人为压低的价格会损害欧盟本土产业的利益。

反补贴税:针对“背后有政府支持”

反补贴税则针对的是出口产品接受了其本国政府提供的、具有“专向性”的财政支持(即补贴),从而获得了不公平的竞争优势。

这种补贴可能表现为直接的资金拨款、优惠贷款、税收减免或廉价土地等。征收反补贴税的目的,是抵消这种由政府补贴带来的价格优势,以“填平”其对欧盟产业造成的损害。需要注意的是,它针对的是政府补贴行为,而非企业自身的定价策略。

“双重救济”问题

“双反”叠加在实践中会引出一个复杂的法律争议,即 “双重救济”(Double Remedy)。

理论上,如果一项出口补贴既压低了出口价格(构成倾销的一部分),又被单独计算为反补贴税的对象,那么同时征收反倾销税和反补贴税,就可能对同一项补贴行为进行了两次抵消。这违反了世界贸易组织(WTO)的规则,构成不当的重复处罚。

因此,在规范的“双反”调查中,调查机关有义务进行技术性调整,以避免这种重复计算。不过,实践中这一原则正面临挑战。例如,在2026年的对华轮胎“双反”案中,欧盟产业界就试图推动欧委会放弃避免“双重救济”的既有惯例,寻求在反倾销税之上“叠满”反补贴税而不作扣减。这反映出“双反”工具在实际运用中,可能成为施加更大贸易压力的手段。

欧盟的“双反”关税是其贸易救济体系中最具威慑力的组合工具之一,其核心在于甄别并抵消来自企业(倾销)和政府(补贴)两个层面的不公平竞争优势,而围绕其产生的“双重救济”争议,则体现了规则与实践之间的持续博弈。

案例一

太阳能玻璃(光伏玻璃):12年“双反”的落幕。
税率水平:税率因企业而异,反倾销税率为17.5%~75.4%,反补贴税率为3.2%~17.1%。对于未获单独税率的出口商,合计税率最高可达84.2%。

这是最有趣的一个案例,因为今年被终止了。。。终止原因:2026年10月,欧盟正式废止该措施。直接原因并非认定倾销或补贴不成立,而是欧盟境内已没有活跃的光伏玻璃生产商,反倾销制度所要保护的“国内产业”基础已不复存在。此前推动调查的德国GMB公司也已破产。

案例二

轮胎(乘用车及轻型卡车胎):“双重救济”争议的前沿。

2026年7月,欧盟已对中国乘用车及轻型卡车轮胎征收最终反倾销税,未合作企业税率为45.3%,多数合作企业为24.4%。针对同一产品的反补贴调查仍在进行。2026年8月,欧盟产业界提交意见,主张在计算时不对某些补贴作“双重救济”扣减,意图在反倾销税之上叠加征收反补贴税(即“叠满而不抵扣”)。这直接挑战了欧委会过去为避免对同一补贴重复抵消而进行税率扣减的惯例。

RuoYi Vue 管理后台页面的 Nginx 缓存问题

2026-10-22 20:03:34

目前的 RuoYi Vue 管理后台的前端发布之后,浏览器还是会缓存上一次发布的页面,触发手动刷新一下浏览器才能看到最新版本的前端页面。 目前使用的是 nginx 部署的。

修改前返回的 HTTP 头

HTTP/1.1 200 OK 
Server: nginx/1.30.4 
Date: Wed, 21 Oct 2026 07:29:39 GMT 
Content-Type: text/html 
Content-Length: 52778 
Last-Modified: Mon, 19 Oct 2026 04:00:22 GMT 
Connection: keep-alive 
ETag: "6ad595d6-ce2a" 
Accept-Ranges: bytes 

禁止页面缓存

旧的 Nginx 配置:

location / {
    root   /var/www/sunzhongwei.com/dist;
    try_files $uri $uri/ /index.html;
    index  index.html index.htm;
}

目前这个 location / 完全没有设置任何缓存头。nginx 对静态文件默认只下发 Last-Modified / ETag,浏览器会对 index.html 做”启发式缓存”(通常按 (当前时间 - Last-Modified) × 10% 来缓存),导致发版后浏览器仍然拿着旧的 index.html → 引用旧的 hash 资源名 → 页面不更新,必须手动刷新。

Vue 构建产物(app.8f3a2c.js、chunk-vendors.xxx.css)文件名本身带内容 hash,内容一变文件名就变,所以这些静态资源可以放心地长缓存;真正需要”每次都拿最新”的只有一个入口文件 index.html。

关键陷阱:SPA 的 try_files $uri $uri/ /index.html 回退时,浏览器请求的是根路径 /,匹配的是 location / 本身,URI 并不是 *.html,所以很多人写的 location ~* \.html$ { ... } 根本拦不到根路径回退。最稳妥的办法是按响应 Content-Type 来区分缓存策略。

需要两处改动:

① map 必须写在 http 上下文(nginx.conf 主配置或 conf.d/ 下被 http { ... } include 的文件里,不能写在 server 块内):

# http 上下文:按响应类型设置缓存策略
map $sent_http_content_type $cache_control {
    default "public, max-age=31536000, immutable";   # 带 hash 的 js/css/img 等长缓存
    ~text/html "no-cache, no-store, must-revalidate"; # 入口 HTML 每次都重新校验
}

② 在现有 server 的 location / 里加一行 add_header:

location / {
    root   /var/www/sunzhongwei.com/dist;
    try_files $uri $uri/ /index.html;
    index  index.html index.htm;

    # 入口 HTML 不缓存(含 SPA 根路径回退),静态资源长缓存
    add_header Cache-Control $cache_control;
}

这样:
- 访问 /(回退到 index.html,Content-Type 是 text/html)→ Cache-Control: no-cache, no-store, must-revalidate,浏览器每次都向服务端校验,拿到最新的 index.html;
- 访问 /js/app.8f3a2c.js(Content-Type 是 application/javascript)→ Cache-Control: public, max-age=31536000, immutable,一年内直接命中本地缓存,无需重新下载。

因为新发布后 index.html 一定是最新的,它引用的就是新 hash 资源名,刷新即生效。

改完配置后 nginx -t && nginx -s reload

修改后返回的 HTTP 头

HTTP/1.1 200 OK
Server: nginx/1.30.4
Date: Wed, 21 Oct 2026 07:35:25 GMT
Content-Type: text/html
Content-Length: 52778
Last-Modified: Mon, 19 Oct 2026 04:00:22 GMT
Connection: keep-alive
ETag: "6ad595d6-ce2a"
Cache-Control: no-cache, no-store, must-revalidate
Accept-Ranges: bytes

果然 OK 了。

授权运行小程序的微信账号与当前微信账号不一致

2026-10-21 20:24:57

昨晚早早躺下准备睡觉了,收到一位预约人数统计小程序的用户的客服消息,说无法账号授权,看起来还挺着急。

这个报错信息,我还是第一次见,显示:

授权运行小程序的微信账号与当前微信账号不一致

授权运行小程序的微信账号与当前微信账号不一致

我以为是这个小程序长期没有升级,没有兼容最新的授权接口规范被强制收回了授权功能。于是,赶紧打开小程序测试了一下,不过幸运的是,我的测试一切正常,而且运行了这么多年依旧很流畅。那就说明,只是这个用户的个例了,我查了一下,通常是因为小程序记录的授权身份,和你手机上当前正在使用的微信身份不匹配。有两种可能:

场景一:你在企业微信里打开小程序

这是最常见的原因。企业微信需要关联一个个人微信账号,如果企业微信绑定的微信号,和你当前手机登录的微信不是同一个,就会报错。

解决方法:在手机企业微信中,进入 “我” → “设置” → “账号与安全” → “微信”,确认绑定的微信号,并确保它与手机当前登录的微信一致。确认后,建议在企业微信中退出登录,重新登录时选择“微信授权登录”,强制同步身份。

场景二:手机开了“微信双开”或“应用分身”

如果你手机里有多个微信(例如微信A和微信B),系统在跳转授权时,可能会自动或随机选择其中一个。如果它选中的不是你小程序绑定的那个账号,就会授权失败。

解决方法:检查手机是否开启了应用双开。如果开启了,可以尝试暂时关闭双开功能,只保留一个微信账号操作;或者在授权跳转时,留意系统弹出的选择框,手动选定正确的那个微信账号。

我把解决方案发给用户,然后对方就没有再找我,大概率是解决了 😄

才发现这个小程序已经上线六年了,而且是我第一个用 golang 做后台的小程序:

🌳 预约人数统计的小程序

PowerShell 无法启动,报错 totalwidth ('-17') must be a non-negative value. (parameter 'totalwidth')

2026-10-21 19:41:46

今天早上上班打开电脑,便大吃一惊,PowerShell 无法打开了,于是我在 psmux 里配置的开发环境就无法启动,没有 psmux 我都不知道该怎么启动调试环境。。。我 PowerShell 版本是 7.6.6。

PowerShell 报错

一打开就报错,我重启系统,重新进入,还是报错:

totalwidth (‘-17’) must be a non-negative value. (parameter ‘totalwidth’)

具体报错是:

PowerShell 7.6.6
Process terminated.
totalWidth ('-17') must be a non-negative value. (Parameter 'totalWidth')
Actual value was -10.
   at System.Environment.FailFast(System.Runtime.CompilerServices.StackCrawlMarkHandle, System.String, System.Runtime.CompilerServices.ObjectHandleOnStack, System.String)
   at System.Environment.FailFast(System.Threading.StackCrawlMark ByRef, System.String, System.Exception, System.String)
   at System.Environment.FailFast(System.String, System.Exception)
   at Microsoft.PowerShell.UnmanagedPSEntry.Start(System.String[], Int32)
   at Microsoft.PowerShell.ManagedPSEntry.Main(System.String[])
System.ArgumentOutOfRangeException: totalWidth ('-10') must be a non-negative value. (Parameter 'totalWidth')
Actual value was -10.
   at System.ArgumentOutOfRangeException.ThrowNegative[T](T value, String paramName)
   at System.String.PadRight(Int32 totalWidth, Char paddingChar)
   at Microsoft.PowerShell.UpdatesNotification.ShowUpdateNotification(PSHostUserInterface hostUI)
   at Microsoft.PowerShell.ConsoleHost.Start(String bannerText, String helpText, Boolean issProvidedExternally)
   at Microsoft.PowerShell.UnmanagedPSEntry.Start(String[] args, Int32 argc)

我一开始以为是双屏幕造成的,切换了不同屏幕,每个屏幕上最大化也不行。彻底没有办法了。
好在在 github 上找到了解决方案。而且就是这两天的讨论。

https://github.com/PowerShell/PowerShell/issues/28131

解决办法

启动 Windows 命令行,即,cmd 命令行,输入下面命令

setx POWERSHELL_UPDATECHECK Off

这个命令的作用是,禁用 PowerShell 的更新检测。

执行之后,再关闭终端,再打开 PowerShell 就能正常使用了。。。没想到微软还能出这么恐怖的 bug。

问题出在哪里

我大概浏览了一下 github 上那个 issue 的讨论,看起来都是中日韩三种语言出了问题。

然后开发组的程序员一小时前还在回复:

The PowerShell team has decided to remove the Update Notification feature as it provides increasingly limited additional value nowadays.

真的大无语。

PowerShell cannot start, reporting `totalwidth ('-17') must be a non-negative value (parameter 'totalwidth')`

2026-10-21 19:40:31

This morning when I got to work and turned on my computer, I was shocked: PowerShell would not open. As a result, the development environment I had configured in psmux could not start. Without psmux, I wouldn’t even know how to start my debugging environment… My PowerShell version is 7.6.6.

PowerShell Error

It throws an error as soon as I open it. I restarted the system and logged in again, but it still errors:

totalwidth (‘-17’) must be a non-negative value. (parameter ‘totalwidth’)

The specific error is:

PowerShell 7.6.6
Process terminated.
totalWidth ('-17') must be a non-negative value. (Parameter 'totalWidth')
Actual value was -10.
   at System.Environment.FailFast(System.Runtime.CompilerServices.StackCrawlMarkHandle, System.String, System.Runtime.CompilerServices.ObjectHandleOnStack, System.String)
   at System.Environment.FailFast(System.Threading.StackCrawlMark ByRef, System.String, System.Exception, System.String)
   at System.Environment.FailFast(System.String, System.Exception)
   at Microsoft.PowerShell.UnmanagedPSEntry.Start(System.String[], Int32)
   at Microsoft.PowerShell.ManagedPSEntry.Main(System.String[])
System.ArgumentOutOfRangeException: totalWidth ('-10') must be a non-negative value. (Parameter 'totalWidth')
Actual value was -10.
   at System.ArgumentOutOfRangeException.ThrowNegative[T](T value, String paramName)
   at System.String.PadRight(Int32 totalWidth, Char paddingChar)
   at Microsoft.PowerShell.UpdatesNotification.ShowUpdateNotification(PSHostUserInterface hostUI)
   at Microsoft.PowerShell.ConsoleHost.Start(String bannerText, String helpText, Boolean issProvidedExternally)
   at Microsoft.PowerShell.UnmanagedPSEntry.Start(String[] args, Int32 argc)

At first I thought it was caused by dual monitors. I switched between different screens and maximized on each screen, but it still didn’t work. I was completely out of options. Fortunately, I found a solution on GitHub. And it was a discussion from just the past couple of days.

https://github.com/PowerShell/PowerShell/issues/28131

Solution

Launch the Windows command line, i.e., the cmd command line, and enter the following command:

setx POWERSHELL_UPDATECHECK Off

This command disables PowerShell’s update check.

After executing it, close the terminal and reopen PowerShell, and it works normally… I never expected Microsoft could ship such a terrifying bug.

What Is the Root Cause?

I skimmed the discussion in that GitHub issue. It seems the problem occurred in Chinese, Japanese, and Korean. Then a programmer on the development team was still replying an hour ago:

The PowerShell team has decided to remove the Update Notification feature as it provides increasingly limited additional value nowadays.

Truly speechless.

图片压缩工具微信小程序,手机本地压缩体积减少九成

2026-10-20 20:18:05

在大象拼图配色小程序里加上了图片安全检测接口之后(参见微信小程序版本审核未通过,理由是图片未接入内容安全API),就可以安心地添加各种图片处理功能了。再也不用担心被随时卡审核了🤪。于是我准备把之前写好的一些手机本地处理图片的功能逐步上线。这次上线的是图片压缩工具,本地压缩体积减少九成。大部分图片处理场景实际上用手机内置的图片处理功能就可以,但是图片压缩一直没有找到,还不如自己简单写个。

效果如下

图片压缩工具微信小程序

体验方式

微信中搜索🔍大象拼图配色,在首页找到 图片压缩 功能。

或者微信扫码下方小程序码

图片压缩工具微信小程序码

然后选择本地图片,或者拍照均可,可以选择不同的压缩等级,例如高清、标准、省流、极小。还可以在高级设置了,手动设置具体的压缩参数。