首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 2009 Character 單元基礎:ToUpper/ToLower 大小寫轉換全攻略

     編輯:Delphi

Character 單元:Unicode 正確的大小寫轉換

Delphi 2009 引入 Character 單元,提供 ToUpper、ToLower 靜態方法,支援 單一字元 與 完整字串 的 Unicode 正確大小寫轉換,取代舊版 SysUtils.UpperCase/LowerCase 及 Windows API CharUpper/CharLower 的侷限性。

核心 API 對照表

完整測試程式碼


uses Character, Windows, SysUtils;

procedure TForm1.Button1Click(Sender: TObject); // Character.ToUpper
var c: Char; str: string;
begin
  c := ToUpper('a');        // 'A'
  str := ToUpper('Delphi'); // 'DELPHI'
  ShowMessageFmt('%s, %s', [c, str]);
end;

procedure TForm1.Button2Click(Sender: TObject); // Character.ToLower
var c: Char; str: string;
begin
  c := ToLower('A');        // 'a'
  str := ToLower('Delphi'); // 'delphi'
  ShowMessageFmt('%s, %s', [c, str]);
end;

procedure TForm1.Button3Click(Sender: TObject); // Windows API CharUpper/CharLower
var c1, c2: Char;
begin
  c1 := Char(CharUpper(PChar('a'))); // 'A'
  c2 := Char(CharLower(PChar('B'))); // 'b'
  ShowMessageFmt('%s, %s', [c1, c2]);
end;

procedure TForm1.Button4Click(Sender: TObject); // SysUtils 舊版
var s1, s2: string;
begin
  s1 := UpperCase('Delphi'); // 'DELPHI'
  s2 := LowerCase('Delphi'); // 'delphi'
  ShowMessageFmt('%s, %s', [s1, s2]);
end;

四種方案深度對比

方法參數類型回傳類型說明
ToUpperCharChar單一字元大寫
ToUpperstringstring字串全大寫
ToLowerCharChar單一字元小寫
ToLowerstringstring字串全小寫
方案單元支援類型Unicode 支援效能適用場景
Character.ToUpper/ToLowerCharacterChar, string✅ 完整 (含語系特殊規則)高現代 Delphi 專案首選
SysUtils.UpperCase/LowerCaseSysUtilsstring⚠️ 部分語系有問題 (如土耳其語 İ/i)中舊版相容、純 ASCII
Windows.CharUpper/CharLowerWindowsPChar (單字元)✅ 系統區域設定相關低 (API 呼叫開銷)需依賴系統區域設定
AnsiUpperCase/AnsiLowerCaseSysUtilsAnsiString❌ 僅 ANSI 代碼頁中舊版 ANSI 專案

Unicode 特殊大小寫規則實例

字元ToUpperToLower說明
ß (德語銳音)SSß大寫展開為兩字元
İ (土耳其語帶點大寫 I)İi (不帶點)語系相關對應
ı (土耳其語不帶點小寫 i)I (不帶點)ı語系相關對應
Σ (希臘語 Sigma)Σσ/ς詞尾/非詞尾不同小寫
Dž (塞爾維亞語 Dz)DŽdž標題殼/大寫/小寫三形態

實務最佳實務

1. 統一使用 Character 單元


uses Character;

// 新專案統一採用
function NormalizeKey(const s: string): string;
begin
  Result := Character.ToUpper(s); // 或 ToLower
end;

2. 大小寫不敏感比較


function SameTextEx(const s1, s2: string): Boolean;
begin
  Result := Character.ToUpper(s1) = Character.ToUpper(s2);
  // 或用 SysUtils.SameText (內部已處理區域設定)
end;

3. 首字大寫 (Title Case) 簡易實作


function ToTitleCase(const s: string): string;
var
  words: TArray<string>;
  i: Integer;
begin
  words := s.Split([' ']);
  for i := 0 to High(words) do
    if words[i].Length > 0 then
      words[i] := Character.ToUpper(words[i][1]) + Character.ToLower(words[i].Substring(1));
  Result := string.Join(' ', words);
end;

避坑指南

  • 勿混用 ANSI/Unicode 函數:AnsiUpperCase 用於 AnsiString,Character.ToUpper 用於 string (UnicodeString)
  • 土耳其語 I/ı 問題:跨平台/多語系專案務必用 Character 單元,避免 UpperCase('ı') = 'I' 導致邏輯錯誤
  • 字元 vs 字串重載:ToUpper('A') 回傳 Char,ToUpper('ABC') 回傳 string,編譯器自動解析
  • 效能敏感場合:大量字元轉換考慮預先建立查找表或使用 SIMD 優化庫

總結

Character.ToUpper/ToLower 是 Delphi 2009+ 進行大小寫轉換的標準方案,完整支援 Unicode 複雜規則,API 設計直觀支援字元與字串雙重載。棄用舊版 UpperCase/LowerCase 及 Windows API,統一遷移至 Character 單元,即能構建健壯的國際化應用程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved