EncodingMappingDemo.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Text;
  2. namespace Apq.Cfg.Samples.Demos;
  3. /// <summary>
  4. /// 示例 8: 编码映射配置
  5. /// </summary>
  6. public static class EncodingMappingDemo
  7. {
  8. public static async Task RunAsync(string baseDir)
  9. {
  10. Console.WriteLine("═══════════════════════════════════════════════════════════════");
  11. Console.WriteLine("示例 8: 编码映射配置");
  12. Console.WriteLine("═══════════════════════════════════════════════════════════════\n");
  13. var configPath = Path.Combine(baseDir, "encoding-demo.json");
  14. File.WriteAllText(configPath, """
  15. {
  16. "App": {
  17. "Name": "编码测试应用",
  18. "Description": "支持中文和特殊字符: äöü ñ 日本語"
  19. }
  20. }
  21. """, Encoding.UTF8);
  22. Console.WriteLine("8.1 编码检测置信度阈值:");
  23. var cfg1 = new CfgBuilder()
  24. .WithEncodingConfidenceThreshold(0.7f)
  25. .AddJson(configPath, level: 0, writeable: false)
  26. .Build();
  27. Console.WriteLine($" 置信度阈值设置为 0.7");
  28. Console.WriteLine($" App:Name = {cfg1.Get("App:Name")}");
  29. cfg1.Dispose();
  30. Console.WriteLine("\n8.2 编码检测日志:");
  31. var cfg2 = new CfgBuilder()
  32. .WithEncodingDetectionLogging(result =>
  33. {
  34. Console.WriteLine($" [编码检测] 文件: {Path.GetFileName(result.FilePath)}");
  35. Console.WriteLine($" 编码: {result.Encoding.EncodingName}");
  36. Console.WriteLine($" 置信度: {result.Confidence:P0}");
  37. Console.WriteLine($" 方法: {result.Method}");
  38. })
  39. .AddJson(configPath, level: 0, writeable: false)
  40. .Build();
  41. cfg2.Dispose();
  42. Console.WriteLine("\n8.3 编码映射规则:");
  43. Console.WriteLine(" 支持三种映射方式:");
  44. Console.WriteLine(" - 完整路径: AddReadEncodingMapping(path, encoding)");
  45. Console.WriteLine(" - 通配符: AddReadEncodingMappingWildcard(\"*.json\", encoding)");
  46. Console.WriteLine(" - 正则: AddReadEncodingMappingRegex(@\"config.*\\.json$\", encoding)");
  47. // 演示编码映射配置
  48. var cfg3 = new CfgBuilder()
  49. // 为特定文件指定编码
  50. .AddReadEncodingMapping(configPath, Encoding.UTF8, priority: 100)
  51. // 为所有 JSON 文件指定写入编码
  52. .AddWriteEncodingMappingWildcard("*.json", new UTF8Encoding(false), priority: 50)
  53. .AddJson(configPath, level: 0, writeable: false)
  54. .Build();
  55. Console.WriteLine("\n 已配置编码映射规则");
  56. Console.WriteLine($" App:Description = {cfg3.Get("App:Description")}");
  57. cfg3.Dispose();
  58. File.Delete(configPath);
  59. Console.WriteLine("\n[示例 8 完成]\n");
  60. await Task.CompletedTask;
  61. }
  62. }