When I run your statements on SQL 2016, I get different results
declare @string1 varchar(100) = 'Green Hello world'
select charindex(' ',@string1,1) -- returns 6
declare @string2 varchar(100) = '?Green Hello world'
select charindex(' ',@string2,1) -- returns 7
select ascii(' ') -- returns 32
select ascii('?') -- returns 63