文字與日常工具·文字工具包
為什麼大寫不只是 A-Z:ß、土耳其語 i 和 Unicode 大小寫映射
· 背景
統一碼 大小寫轉換 本地化
解釋了為什麼大寫和小寫是由 Unicode 表而不是字母算術定義的,除了眾所周知的例外 - ß 變為 SS、土耳其語無點 ı 和希臘語詞尾 sigma - 以及這對於任何基於瀏覽器的轉換器意味著什麼。
STRASSE 與成長的字母 — 為什麼大寫「straße」會改變字元數
將 `straße` 貼到轉換器中並將其大寫:JavaScript 產生 `STRASSE`。結果明顯更長,因為這裡使用的預設操作將小寫升號 s 映射為兩個大寫字母。因此,假設大小寫轉換保留字元計數的驗證規則可能會拒絕、截斷或錯位其他有效的德語文字。
反向方向不會重建來源。小寫 `STRASSE` 會產生 `strasse`,而不是 `straße`,因為大寫序列也代表一對普通的 s 字母。因此,大小寫轉換是文字轉換,而不是可逆編碼。當身分、顯示保真度或精確比較很重要時,請保留原始拼字。
大小寫映射為表格,而不是公式 — Unicode 如何為每個大小寫字母定義簡單和完整的大小寫映射
ASCII 代碼通常教導一種方便的模式:大寫和小寫拉丁字母佔據可預測的範圍,因此數字偏移量似乎將它們連接起來。一旦文字包含超出這些範圍的字母或映射產生多個輸出字符,該模型就不再有用。因此,轉換器呼叫 JavaScript 字串大小寫方法,而不是執行字母算術。
儲存庫不會公開 Unicode 映射表或區分簡單映射和完整映射,因此這些詳細資訊不應作為此工具的功能呈現。它的可觀察契約更窄: `toUpperCase()` 和 `toLowerCase()` 委託給瀏覽器引擎。應在實際使用轉換文字的環境中測試結果。
大小寫轉換使用引擎提供的字元映射,而不是此工具公開的算術或表
長度變更結果影響的不僅是輸入旁邊的計數器。在轉換之前計算的儲存的偏移量、選擇範圍、突出顯示和遊標位置可能不再指向轉換後的預期文字。同樣的風險也適用於根據輸入長度分配輸出空間或假設一個原始字元始終對應於一個結果字元的任何工作流程。
即使特定範例保持相同的可見長度,往返也可能會失去差異。幾種來源拼字可能會集中在一種大寫形式上,從而使小寫操作沒有足夠的資訊來選擇原始拼字。僅當損失可接受時才比較轉換後的值;否則保留原件並使用針對產品要求設計的比較策略。
長度改變映射以及為什麼轉換回來不能總是恢復來源
希臘西格瑪提供了不同的警告。小寫希臘文使用的西格瑪形式可以隨單字中的位置而變化,因此大小寫的改變並不總是由一個單獨的字元決定。 JavaScript 接收完整的字串,允許其內建的小寫行為考慮周圍的文字,而不是用一個固定的字形替換每個大寫西格瑪。
在完整單字中測試 sigma,而不僅僅是作為單字元樣本。標點符號、空格和單字邊界是引擎評估的輸入的一部分,編輯它們可以改變小寫結果。對於本地化審查,請保留介面使用的整個短語並將該短語與批准的翻譯進行比較,而不是單獨檢查程式碼點。
希臘西格瑪表明小寫可以取決於周圍的文字
土耳其語區分帶點 i 和無點 i 的方式是預設的、與區域設定無關的大小寫轉換不會建模為土耳其語特定的行為。 ToolAcre 配置明確表示其映射與區域設定無關,且土耳其語點式和無點式 i 不是特殊情況。因此,看似合理的結果並不能證明名稱、地址或介面字串已為土耳其讀者正確轉換。
實際的回應是不在通用轉換後加入替換。此類替換可能會損壞混合語言文字,並仍然會遺失上下文。在已知區域設定的軟體中使用區域設定感知操作,並在該設定中審核土耳其語或阿塞拜疆語內容。在此轉換器中,將 i 範例視為已記錄限制的演示。
土耳其語點式和無點我需要此轉換器不提供的區域設定感知處理
ToolAcre 透過在完整輸入上呼叫對應的 JavaScript 字串方法來實作 UPPER 和 lower。它不傳遞區域設定、載入語言字典或請求伺服器端轉換。因此,輸出是瀏覽器引擎的預設情況結果,這對於檢查普通應用程式行為很有用,但對於驗證特定於語言的排版則無用。
在重現 bug 時,這種差異很重要。記錄確切的來源字串、選定的轉換和結果字串,而不是僅報告大小寫錯誤。如果生產程式碼使用相同的預設 JavaScript 方法,則轉換器提供緊湊的比較。如果生產使用區域設定感知 API,則符合此頁面不是相關的驗收測試。
這不包括什麼 — 有向字母的標題大小寫規則和首都的歷史ẞ
Title Case 按鈕是另一個具有故意限制合約的轉換。它尋找字母串,組合標記或撇號,將第一個字元大寫,其餘字元小寫。它沒有語言字典或風格指南例外,因此首字母縮寫和專有名詞可以更改,而 `of` 和 `the` 等小詞與其他單字一樣大寫。
本文不依賴大綱提出的大寫升號歷史或更廣泛的標題-外殼二合字母規則,因為兩者都不是由經過檢查的來源建立的。這些主題可能具有獨立參考價值,但它們沒有解釋所提供的功能。這裡可靠的指導是檢查每個轉換後的標題並手動恢復有意的拼字。
此工具中的標題大小寫行為,沒有不受支援的字母歷史記錄
在大小寫轉換器中嘗試三個重點檢查:大寫 `straße`、小寫包含大寫 sigma 的希臘單詞,並通過兩個方向執行點式和無點 i 樣本。觀察實際的字串,而不是根據英語預測它們。然後在實驗之間使用“撤消”,以便每個結果從原始文字開始,而不是先前的有損轉換。
更廣泛的教訓是可操作的:大小寫轉換可以改變長度、折疊差異並依賴預設操作不知道的語言上下文。使用該工具來暴露這些行為,而不是承諾通用本地化的正確性。保留來源文字,測試完整的真實短語,並在需要特定於語言的結果時應用區域設定感知審核。