diff --git a/ruby/scripts/generate-metadata.rb b/ruby/scripts/generate-metadata.rb index 8bd40a3514..2d41a5dd68 100755 --- a/ruby/scripts/generate-metadata.rb +++ b/ruby/scripts/generate-metadata.rb @@ -14,7 +14,9 @@ class MetadataExtractor METHODS = %w[get post put patch delete].freeze def initialize(openapi_path) - @openapi = JSON.parse(File.read(openapi_path)) + # Read as UTF-8 regardless of process locale (LC_ALL=C would otherwise read + # as US-ASCII and JSON.parse dies on the spec's multibyte characters) + @openapi = JSON.parse(File.read(openapi_path, encoding: 'UTF-8')) end def extract diff --git a/ruby/scripts/generate-services.rb b/ruby/scripts/generate-services.rb index 71eb8733d0..b898e7ffcf 100644 --- a/ruby/scripts/generate-services.rb +++ b/ruby/scripts/generate-services.rb @@ -321,7 +321,8 @@ def download(upload_id:) ].freeze def initialize(openapi_path) - @openapi = JSON.parse(File.read(openapi_path)) + # UTF-8 regardless of process locale — see generate-metadata.rb + @openapi = JSON.parse(File.read(openapi_path, encoding: 'UTF-8')) @schemas = @openapi.dig('components', 'schemas') || {} end diff --git a/ruby/scripts/generate-types.rb b/ruby/scripts/generate-types.rb index 1d012d9f85..f4dfbc4bf0 100755 --- a/ruby/scripts/generate-types.rb +++ b/ruby/scripts/generate-types.rb @@ -131,7 +131,8 @@ def deprecation_doc_lines(reason, indent:, tag_prefix: '') puts ' module Types' puts ' include TypeHelpers' - schemas = JSON.parse(File.read(openapi_path))['components']['schemas'] || {} + # UTF-8 regardless of process locale — see generate-metadata.rb + schemas = JSON.parse(File.read(openapi_path, encoding: 'UTF-8'))['components']['schemas'] || {} sorted = schemas.keys.sort sorted.each do |name|