这时候某位一直沉默不语的同学终于站起来发言了:你们呐,就是不讲武德,搞偷袭!这样好吗?这样不好,年轻人不要耍小聪明,偷袭我上了年纪的老编译器。解决这个问题,明明有阳关大道可以走嘛,为什么非要过独木桥呢?
众人的目光聚焦到了他的身上,异口同声地说道:愿闻其详。
这位同学继续说道:你们呐,刚才肯定是没有认真听讲,据我所知,UTF-16在Windows里面也是有代码页的,是1200,fscanf不是根据setlocale来确定多字节字符的编码么?那我只要setlocale(LC_ALL, ".1200");不就可以了么?
微软:你在教我做事
?


怎么样?傻眼了吧
。
想把控制台代码页设成1200(CHCP 1200)也是不可行的,cmd会显示“无效代码页”。
微软倒也不是完全拒绝把代码页设为1200,只是对此作出了很大的限制:

所以说了这么多,就没有办法读取UTF-16编码的文本文件了吗?非也,既然fscanf在这种情况下不好用,咱们何不返璞归真?以二进制模式打开文本文件,用fread把文件内容读到wchar_t数组里面,然后再慢慢处理不就好了嘛,办法总是会有的。
众人的目光聚焦到了他的身上,异口同声地说道:愿闻其详。
这位同学继续说道:你们呐,刚才肯定是没有认真听讲,据我所知,UTF-16在Windows里面也是有代码页的,是1200,fscanf不是根据setlocale来确定多字节字符的编码么?那我只要setlocale(LC_ALL, ".1200");不就可以了么?
微软:你在教我做事



怎么样?傻眼了吧

想把控制台代码页设成1200(CHCP 1200)也是不可行的,cmd会显示“无效代码页”。
微软倒也不是完全拒绝把代码页设为1200,只是对此作出了很大的限制:

所以说了这么多,就没有办法读取UTF-16编码的文本文件了吗?非也,既然fscanf在这种情况下不好用,咱们何不返璞归真?以二进制模式打开文本文件,用fread把文件内容读到wchar_t数组里面,然后再慢慢处理不就好了嘛,办法总是会有的。