栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

file.encoding无效,LC_ALL环境变量会起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

file.encoding无效,LC_ALL环境变量会起作用

注意:所以最后我认为我已经确定了。
我不确定这是正确的。但是通过一些代码阅读和测试,这就是我发现的内容,而且我没有更多时间研究它。如果有人有兴趣,他们可以检查一下,并确定这个答案是对还是错-
我会很高兴:)

我使用的参考资料来自OpenJDK的站点上的以下压缩包: openjdk-6-src-b25-01_may_2012.tar.gz

  1. Java通过以下方法将所有字符串本地转换为平台的本地编码

    jdk/src/share/native/common/jni_util.c - JNU_GetStringPlatformChars()
    。系统属性
    sun.jnu.encoding
    用于确定平台的编码。

  2. 的值

    sun.jnu.encoding
    jdk/src/solaris/native/java/lang/java_props_md.c - GetJavaProperties()
    使用
    setlocale()
    libc的方法设置的。环境变量
    LC_ALL
    用于设置的值
    sun.jnu.encoding
    。在命令提示符下使用
    -Dsun.jnu.encoding
    Java选项使用Java 给出的值将被忽略。

  3. 呼叫

    File.exists()
    已被编码在文件中
    jdk/src/share/classes/java/io/File.java
    ,并且返回为

return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0);

  1. getBooleanAttributes()
    jdk/src/share/native/java/io/UnixFileSystem_md.c
    在函数中的 本地编码(并且我跳过了浏览许多文件的代码的步骤)
    Java_java_io_UnixFileSystem_getBooleanAttributes0()
    。此处,宏
    WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path)
    将路径字符串转换为平台的编码。

  2. 因此,转换为错误的编码实际上会将错误的C字符串(char数组)发送给随后的

    stat()
    方法调用。它将返回结果,找不到文件。

LESSON:

LC_ALL
非常重要



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号