Skip to content

修复默认Locale为土耳其语时忽略大小写的Map及Month/Week/ColorUtil名称解析失效的问题 - #4348

Merged
looly merged 1 commit into
chinabugotech:v5-devfrom
b84330808:fix-turkish-locale-ignore-case
Oct 28, 2026
Merged

looly merged 1 commit into
chinabugotech:v5-devfrom
b84330808:fix-turkish-locale-ignore-case

Conversation

@b84330808

Copy link
Copy Markdown

说明

  1. 请确认你提交的PR是到'v5-dev'分支,否则我会手动修改代码并关闭PR。
  2. 请确认没有更改代码风格(如tab缩进)
  3. 新特性添加请确认注释完备,如有必要,请在src/test/java下添加Junit测试用例

修改描述(包括说明bug修复或者添加新特性)

  1. [bug修复] JVM 默认 Locale 为土耳其语(tr)时,"I".toLowerCase() 是无点的 ı,"i".toUpperCase() 是带点的 İ,导致以下忽略大小写的逻辑失效:

    • CaseInsensitiveMap / new Dict(true):put("ID", v) 后 get("id") 返回 null
    • Month.of("april")、Week.of("friday"):抛出 IllegalArgumentException: No enum constant ...APRİL
    • ColorUtil.getColor("white") 返回 null(pink、light_gray 同理)

    改为用 Locale.ROOT 转换大小写。在 CaseInsensitiveMapTest、DictTest、MonthTest、WeekTest 中补充了用例,并新增 ColorUtilTest,这些用例在修改前均失败。

提交前自测

JDK 8(Temurin 1.8.0_504)下 mvn -pl hutool-core test 新增用例全部通过;其余失败用例(时区 +08:00 假设、CSV 换行)在修改前的 v5-dev 上同样失败,与本次修改无关。

I used Claude Code to write this change.

土耳其语Locale下 "I".toLowerCase() 为无点的 "ı","i".toUpperCase() 为带点的 "İ",
导致 CaseInsensitiveMap、Dict(true) 中 "ID" 与 "id" 不再视为同一个键,
Month.of("april")、Week.of("friday") 抛出 IllegalArgumentException,
ColorUtil.getColor("white") 返回 null。改为使用 Locale.ROOT 转换大小写。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants