您当前的位置:首页 > 互联网教程

Js --- String和utf8互转

发布时间:2025-05-19 22:06:36    发布人:远客网络

Js --- String和utf8互转

一、Js --- String和utf8互转

1、JS中将字符串转换为UTF8和将UTF8转换回字符串的函数实现。

2、函数str2utf8将字符串转换为UTF8格式。首先,使用for循环遍历字符串中的每个字符。对于每个字符,获取其在Unicode中的编码。如果编码值位于特定范围内,函数将使用位运算将其转换为UTF8格式的四个字节序列。否则,它将使用与编码值对应的单字节序列。

3、函数utf82str实现了将UTF8格式转换回字符串。如果输入是字符串,则直接返回。否则,遍历输入的字节数组。对于每个字节,使用位运算来确定其在UTF8序列中的位置,并使用String.fromCharCode将其转换为字符,然后将其添加到结果字符串中。

4、代码示例展示了这些函数的实现。str2utf8函数首先定义了变量c和bytes数组。对于字符串中的每个字符,获取其Unicode编码,并根据编码值范围使用位运算将其转换为UTF8格式的字节序列,然后将这些字节添加到bytes数组中。最终返回转换后的字节数组。

5、在utf82str函数中,首先检查输入是否为字符串,如果是,则直接返回。否则,初始化结果字符串str和字节数组_arr。遍历字节数组,对于每个字节,使用位运算确定其在UTF8序列中的位置,并使用String.fromCharCode将其转换为字符,然后将其添加到结果字符串中。最后,返回转换后的字符串。

二、eclipse怎么设置utf8

eclipse默认编码居然是GBK,js文件默认编码是ISO-....

1、windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧 Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8。

2、windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Content Types,右侧Context Types树,点开Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Update,则设置Java文件编码为UTF-8。其他java应用开发相关的文件如:properties、XML等已经由Eclipse缺省指定,分别为ISO8859-1,UTF-8,如开发中确需改变编码格式则可以在此指定。

3、经过上述两步,新建java文件即为UTF-8编码,Eclipse编译、运行、调试都没问题,但是做RCP应用的Product输出时、或者插件输出时,则总是出错,要么不能编译通过(输出时要重新compile)、要么输出的插件运行时中文显示乱码。此时需要再RCP应用、或插件Plugin工程的build.properties中增加一行,javacDefaultEncoding..= UTF-8。让输出时编译知道java源文件时UTF-8编码。这个设置需要保证所有的java源文件时UTF-8编码格式,如果不全是,可以参考 Eclipse帮中(Plug-in Development Environment Guide> Reference> Feature and Plug-in Build configuration),建议全部java源文件是UTF-8编码。

如果插件开发、RCP应用开发原来基于其他编码,如GB18030,想转换为UTF-8,则首先,做以上工作;然后通过查找编码转换工具,如基于 iconv的批量转换工具,将原编码转换为UTF-8编码,注意只转换java源文件,其他类型文件可能已经是比较合适的编码了;将原工程属性中的 Text file encoding,从原编码改为UTF-8即可。

三、nodejs_bug修复

1、Ineffective mark-compacts near heap limit Allocation failed- JavaScript heap out of memory

[3628:0000020F92556310] 101267813 ms: Mark-sweep 2045.8(2063.6)-> 2045.7(2061.1) MB, 823.6/ 0.0 ms(+ 217.9 ms in 2 steps since start of marking, biggest step 217.9 ms, walltime since start of marking 1052 ms)(average mu= 0.052, current mu= 0.011)

==== JS stack trace=========================================

Security context: 0x016990671ba1<JSObject>

1: parseMessage [00000302F1DB3371] [C:\Platform\node\service\node_modules\pg\lib\connection.js:~377] [pc=0000028DA566DDB0](this=0x03d27f47c261<Connection map= 0000012A6A060F51>,0x03e134ba35c9<Uint8Array map=

2:/* anonymous*/ [0000020ACD5EAF31] [C:\Platform\node\service\node_modules\pg\lib\connection.js:~119] [pc=0000028DA56...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed- JavaScript heap out of memory

1: 00007FF78BAC094F napi_wrap+124431

2: 00007FF78BA62696 v8::base::CPU::has_sse+34502

3: 00007FF78BA63356 v8::base::CPU::has_sse+37766

4: 00007FF78C266F4E v8::Isolate::ReportExternalAllocationLimitReached+94

5: 00007FF78C24EF91 v8::SharedArrayBuffer::Externalize+833

6: 00007FF78C11C85C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436

7: 00007FF78C127C00 v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312

8: 00007FF78C124734 v8::internal::Heap::PageFlagsAreConsistent+3204

9: 00007FF78C119FC3 v8::internal::Heap::CollectGarbage+1283

10: 00007FF78C118794 v8::internal::Heap::AddRetainedMap+2356

11: 00007FF78C140623 v8::internal::Factory::NewRawOneByteString+83

12: 00007FF78C1434D2 v8::internal::Factory::NewStringFromUtf8+130

13: 00007FF78C26386A v8::String::NewFromUtf8+298

14: 00007FF78B9D76EF node::tracing::TraceEventHelper::SetAgent+40751

15: 00007FF78BA79BFD v8::internal::Malloced::operator delete+1661

16: 00007FF78C61341C v8::internal::SetupIsolateDelegate::SetupHeap+4562817: 0000028DA566DDB0

2、<--- JS stacktrace--->

Cannot get stack trace in GC.

FATAL ERROR: MarkCompactCollector: semi-space copy, fallback in old gen Allocation failed- JavaScript heap out of memory

这个问题是node内存泄漏造成的。因为node是单线程的,所有的访问走的一个线程,如果执行完一个,占用内存增加,但是没有释放的话,就造成内存泄漏,内存泄漏其实就是存储泄漏,而造成的原因就是内存分配超过了v8内存的限制数量,而且进程所占用的内存,并没有慢慢释放回来,

解决办法:node--max-old-space-size=6096 analysis.js