Js --- String和utf8互转
发布时间:2025-05-19 22:06:36 发布人:远客网络
一、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